Füllung oben/unten-matplotlib line plot
Ich bin mit matplotlib erstellt ein einfaches Liniendiagramm. Mein plot ist eine einfache Zeit-Serien Daten, die festlegen, wo ich die Zeit entlang der x-Achse und der Wert von etwas, was ich bin-Messung auf der y-Achse. y-Werte haben kann postitive oder negative Werte, und ich möchte, füllen Sie den Bereich über und unter meiner Leitung mit der Farbe blau, wenn der y-Wert > 0 und rot, wenn die y-Werte < 0. Hier mein plot:
Wie Sie sehen können, ich kann mit der blauen Farbe zu füllen richtig, aber ich kann nicht die rote Farbe zu füllen richtig. Hier ist der basic-code, den ich verwende:
plt.plot(x, y, marker='.', lw=1)
d = scipy.zeros(len(y))
ax.fill_between(xs,ys,where=ys>=d, color='blue')
ax.fill_between(xs,0,where=ys<=d, color='red')
Wie bekomme ich die Fläche von einem positiven y-Wert auf der x-Achse blau und die Umgebung aus einer negativen y-Wert auf der x-Achse rot? Vielen Dank für die Hilfe.
ax.fill_between(xs,ys,where=ys<=d, color='red')
, als Sie jetzt versuchen, füllen Sie den Bereich zwischen y1=0
und y2=0
(d.h. keine Fläche). Das zweite argument (in diesem Fall ys
) übergeben wird, der y1
parameter, und da y2
hat default-Wert 0
die Methode füllt die Fläche zwischen das array, das Sie angegeben haben, für y1
und die Linie y=0, das ist, was Sie wollen.Vielen Dank für die Hilfe. Dein Vorschlag bedingt geklappt. Allerdings bin ich immer noch nicht wie man die richtige Farbe füllen, in den Fällen, in denen ein Punkt sagen, (10, 10) verbunden ist ein weiterer Punkt, der kreuzt die x-Achse, sagen, (11, -10). Hier ist, was der plot sieht so aus: postimg.org/image/u329jhlob
Ah, ich dachte, das war es, was Sie wollte, zu sehen, wie Sie sagte, die Blaue Fläche auf der Abbildung oben, war richtig. Dies sollte eine einfache Lösung:
ax.fill_between(xs,ys,where=ys<=d, interpolate=True, color='red')
. Die interpolate
parameter ist die Funktion interpolieren zu finden der Schnittmenge zwischen den y1
und y2
arrays, wie man eine "glattere" - plot.Perfekt!!! Vielen Dank für die Hilfe.
InformationsquelleAutor user1728853 | 2013-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das code-snippet Sie bereitgestellt, sollten wie folgt korrigiert werden:
Den
fill_between
Methode nimmt mindestens zwei Argumentex
undy1
, während es hat auch einen parametery2
mit default-Wert 0. Die Methode füllt den Bereich zwischeny1
undy2
für die angegebenex
-Werte.Der Grund, warum Sie nicht bekommen, eine Füllung unterhalb der x-Achse, ist aufgrund der Tatsache, dass Sie angegeben hatte, dass die
fill_between
Methode sollte füllen Sie den Bereich zwischeny1=0
undy2=0
, d.h. keine Bereich. Um sicherzustellen, dass die Füllung nicht nur auf explizite x-Werte, die angeben, dass die Methode sollte interpoliereny1
zu finden, die Schnittpunkte mity2
, die erfolgt durch Angabeinterpolate=True
im Aufruf der Methode genannt.Danke. Ja, ich bin mir dessen bewusst. Der Grund hielt ich die
d = ...
Aussage ist, dass ich nicht noch weitere änderungen vornehmen, um die OPs original-code als nötig funktionsfähig zu machen. Dies ist, um sicherzustellen, gibt es keine Verwirrung darüber, wo der "Fehler" lag.Ich sehe. Wollte nur sicherstellen, dass andere, die mit Ihrer Lösung kennen die Verknüpfung.
InformationsquelleAutor hooy
Versuchen Sie die keyword -
interpolate=True
.InformationsquelleAutor Thriveth