[PYTHON] Coloration des points en fonction de la distance de la courbe de régression

Objectif

code

example.py


import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()  #Il semble que la figure puisse être magnifiquement dessinée, je l'utilise toujours

amp = 100    #amplitude
frequency = 0.02     #la fréquence
offset = 1000       #décalage

t = np.linspace(0,100,1000)
y_ = amp*np.sin(2*np.pi*frequency*t)+offset  #Valeur théorique=Courbe de récurrence sin
y = np.random.poisson(y_)    #Valeur observée=Avec erreur péché

###Principale###
dis = abs( y_ - y )/ y_.max()   #La différence entre la valeur théorique et la valeur observée est de 0.0~1.Échelle à une valeur de 0
color_list=[ [1-9*i,0,i*9,i*5] for i in dis ]   #Spécifiez la couleur avec la valeur RVB

f = plt.figure(figsize = (12,6))
f.add_subplot(121)
plt.scatter(t,y_)
plt.xlabel('t')
plt.ylabel('y')

f.add_subplot(122)
plt.scatter(t,y,color = color_list)    
plt.xlabel('t')
plt.ylabel('y')

résultat

image.png

Commentaire

Premièrement, en ce qui concerne les données, en substituant à chaque fois la valeur de l'onde sinueuse à np.random.poisson (y_), ** y ** est une onde sinusoïdale qui suit une distribution de poisson avec une erreur moyenne ** y_ **. Par conséquent, une grande valeur a une grande erreur et une petite valeur a une petite erreur.   Comme vous pouvez le voir, la gradation principale utilise cette fois une instruction for pour spécifier la couleur. Dans matplotlib, la couleur peut être spécifiée par [R, V, B, obscurité] = [r, g, b, c]. Cependant, r, g, b, c prennent des valeurs de 0,0 à 1,0. En utilisant ce mécanisme, les quatre règles ont été calculées pour que la couleur soit plus claire sur de courtes distances et plus foncée sur de longues distances. Dans cet exemple, il est rouge clair sur de courtes distances et bleu foncé sur de longues distances.

point important

--La valeur RVB doit être comprise entre 0,0 et 1,0, le coefficient doit donc être ajusté à cette plage.

application

Avec cette spécification de couleur, la distance par rapport à la courbe de régression peut être visualisée sur d'autres figures. Prenons un cas où le code précédent est légèrement modifié et l'erreur augmente avec le temps. (Le code sera décrit plus tard) Compte tenu des chiffres d'axe horizontal ** t **, d'axe vertical ** y **, d'axe horizontal ** y_ **, d'axe vertical ** y **,

image.png

À partir de la figure de gauche, l'augmentation de la distance (erreur) peut être confirmée en un coup d'œil. Sur la figure de droite, on peut voir que la distance entre ** y ** et ** y_ ** est en corrélation avec ** y_ **. De cette manière, on peut s'attendre à ce que la compréhension des données soit encore approfondie en modifiant l'axe de traçage. Plus il y a de paramètres qui déterminent la valeur observée ** y **, plus les perspectives peuvent être appréciées.

Code modifié

example2.py



import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

amp=100   #amplitude
frequency=0.02 #la fréquence
offset=1000     #biais
t=np.linspace(0,100,1000)
y_=amp*np.sin(2*np.pi*frequency*t)+offset

y=np.random.poisson(y_+2.6*t)   ###Changer de ligne###

dis=abs(y_-y)/y_.max()
color_list=[[1-3*i,0,3*i,i] for i in dis]    ###Changer de ligne###

f=plt.figure(figsize=(12,6))
f.add_subplot(121)
plt.scatter(t,y,color=color_list)    
plt.xlabel('t')
plt.ylabel('y')

f.add_subplot(122)
plt.scatter(y_,y,color=color_list)
plt.xlabel('y_')
plt.ylabel('y')

Ajouts

Comparaison du temps et de la valeur théorique ** y_ ** image.png La profondeur de couleur de l'emballage est probablement due à la forte densité de points.

Recommended Posts

Coloration des points en fonction de la distance de la courbe de régression
Point selon l'image
Points à noter lors de la suppression de plusieurs éléments de la liste
Supprimer ou récupérer des tableaux de fasta en fonction du fichier de liste d'ID
Comment faire fonctionner Linux depuis la console
Comment accéder à la banque de données de l'extérieur
[Rust] Lire les données csv de latitude et de longitude pour trouver la distance entre deux points
Constantes Python comme None (selon la référence)
Introduction à OPTIMIZER ~ De la régression linéaire à Adam à Eve
Je voulais jouer avec la courbe de Bézier
Points à noter lors du passage de NAOqi OS 2.4.3 à 2.5.5
Comment faire fonctionner Linux depuis l'extérieur Procédure
POST des images depuis ESP32-CAM (MicroPython) vers le serveur
De l'introduction de pyethapp à l'exécution du contrat
Histoire de passer de Pipenv à la poésie