2017-07-16 4 views
1

J'ai un nuage de points en python sur lequel je veux tracer une ligne de tendance. Des différents exemples que j'ai trouvé autour de l'Internet pour apprendre comment dessiner la ligne de tendance mon code est le suivant:Diagramme de dispersion en Python et matplotlib

import matplotlib.pyplot as plt 
import numpy as np 

x=np.array([9.80,13.20,13.46,14.09,13.96,10.77,8.79,8.61,8.83,11.08,10.13,12.40,9.90,10.96,12.75,11.79,11.79,12.38,12.78,13.08,12.83,12.57,12.96,12.90,12.91,13.67,12.83,12.50,12.42,12.83,12.82,12.70,12.60,12.90,13.20]) 
y=np.array([0.0706,0.0969,0.0997,0.1031,0.0848,0.1044,0.0815,0.1030,0.0783,0.0970,0.1193,0.0796,0.0697,0.0738,0.0895,0.0912,0.0887,0.0973,0.0942,0.1052,0.0984,0.0965,0.0903,0.0876,0.1071,0.0872,0.0857,0.0967,0.0926,0.0837,0.0967,0.0935,0.0946,0.0930,0.0758 
]) 

plt.scatter(x, y) 
fit = np.polyfit(x, y, deg=4) 
p = np.poly1d(fit) 
plt.plot(x,p(x),"r--") 
plt.show() 

Mais la ligne de résultat au lieu d'être une ligne courbe est juste un mélange de lignes. Quelqu'un peut-il s'il vous plaît expliquer mon erreur?

Répondre

2

Je pense que c'est parce que les valeurs x ne sont pas triées. Regardez ce code:

import matplotlib.pyplot as plt 
import numpy as np 

x=np.array([9.80,13.20,13.46,14.09,13.96,10.77,8.79,8.61,8.83,11.08,10.13,12.40,9.90,10.96,12.75,11.79,11.79,12.38,12.78, 
      13.08,12.83,12.57,12.96,12.90,12.91,13.67,12.83,12.50,12.42,12.83,12.82,12.70,12.60,12.90,13.20]) 

y=np.array([0.0706,0.0969,0.0997,0.1031,0.0848,0.1044,0.0815,0.1030,0.0783,0.0970,0.1193,0.0796,0.0697,0.0738, 
      0.0895,0.0912,0.0887,0.0973,0.0942,0.1052,0.0984,0.0965,0.0903,0.0876,0.1071,0.0872,0.0857,0.0967,0.0926,0.0837,0.0967,0.0935,0.0946,0.0930,0.0758 ]) 

# Here I sort x values and their corresponding y values 
args = np.argsort(x) 
x = x[args] 
y = y[args] 

plt.scatter(x, y) 
fit = np.polyfit(x, y, deg=4) 
p = np.poly1d(fit) 
plt.plot(x,p(x),"r--") 
plt.show() 

Résultat:

enter image description here

+1

vraiment merci beaucoup! Je vois que j'ai un long chemin à parcourir pour apprendre ... – pma

1

Cela va faire:

plt.scatter(x,y) 
x = sorted(x) 
plt.plot(x,p(x),"r--") 

enter image description here

L'astuce consiste à trier x valeurs avant de tracer la ligne sur leur.

+0

Merci beaucoup pour votre réponse. – pma