2017-07-16 4 views
1

Ich habe ein Streudiagramm in Python, auf dem ich eine Trendlinie zeichnen möchte. Von den verschiedenen Beispielen habe ich um das Internet gefunden zu lernen, wie die Trendlinie zu zeichnen meinen Code ist folgende:Python Streudiagramm und 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() 

Aber das Ergebnis Linie stattdessen eine Kurvenlinie des Seins ist nur eine Mischung aus Linien. Kann mir bitte jemand meinen Fehler erklären?

Antwort

2

Ich denke, es ist, weil x Werte nicht sortiert sind. Schauen Sie sich diesen 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() 

Ergebnis:

enter image description here

+1

wirklich vielen Dank! Ich sehe, dass ich einen langen Weg zum Lernen habe ... – pma

1

Dies tun:

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

enter image description here

Der Trick ist x Werte zu sortieren, bevor Zeile über Plotten Sie.

+0

Vielen, vielen Dank für Ihre Antwort. – pma

Verwandte Themen