2016-07-18 21 views
1

Ich habe eine Kurve von einigen Daten, die ich mit Matplotlib plotten. Der kleine Wert x-Bereich der Daten besteht ausschließlich aus NaN-Werten, so dass meine Kurve abrupt bei einem Wert von x >> 0 beginnt (was für verschiedene Datensätze nicht notwendigerweise der gleiche Wert ist). Ich möchte eine vertikale gestrichelte Linie dort platzieren, wo die Kurve beginnt und sich von der Kurve zur x-Achse erstreckt. Kann mir jemand sagen, wie ich das machen könnte? DankPython - Plotten vertikale Linie

Antwort

2

Angenommen, Sie wissen, wo die Kurve beginnt, können Sie einfach verwenden:

plt.plot((x1, x2), (y1, y2), 'r-') die Linie vom Punkt (x1, y1) bis zu dem Punkt (x2, y2)

Hier in Ihrem Fall zu ziehen, x1 und x2 werden gleiche , nur y1 und y2 sollte sich ändern, da es eine gerade vertikale Linie ist, die Sie wollen.

+0

Wenn ich nicht weiß, wo die Kurve beginnt, gibt es eine Möglichkeit, die Position in einem Array der ersten Nicht-NaN-Werte herauszufinden? –

+0

Ja kann getan werden .. Verwenden Sie einfach eine 'for' Schleife, um die genaue Position des letzten' NaN' in Ihrem Array zu finden. Wenn Sie davon ausgehen, dass Ihr Array 'x' heißt, können Sie' x [12] 'verwenden, vorausgesetzt, der letzte' NaN'-Wert wurde an der 12. Position in Ihrem Array gefunden – ThePredator

1

vertikale gestrichelte Linie Zum Zeichnen Sie den gleichen x-Wert gesetzt und Code wie folgt machen (use ‚-‘ für gestrichelte Linie oder ‚:‘):

x = 100 # line at this x position 
y0 = 0 # y limits of a line 
y1 = 100 
plt.plot((x,x),(y0,y1),'k--') 
2

Als Alternative können Sie Verwenden Sie auch plt.vlines, um eine vertikale Linie zu zeichnen, und vorausgesetzt, dass Ihre Daten in einem numby Array und nicht in einer Liste sind, können Sie die for-Schleife überspringen, um den ersten Nicht-NaN-Wert zu ermitteln und np.isfinite stattdessen verwenden. Etwas wie:

x_value = data_array[np.where(np.isfinite(data_array))[0]] 

Je nachdem, wie viele Werte, die Sie in einer Schleife haben durch jedes Mal auf den ersten endlichen Wert zu erhalten, kann dies eine schnellere Option sein.