Ich benutze Matplotlib, um ein einfaches Liniendiagramm zu erstellen. Mein Diagramm ist ein einfacher Zeitreihendatensatz, in dem ich Zeit entlang der x-Achse und den Wert von etwas habe, das ich auf der y-Achse vermesse. y-Werte können postive oder negative Werte haben und ich möchte den Bereich über und unter meiner Linie mit der Farbe blau füllen, wenn der y-Wert> 0 ist und rot, wenn der y-Wert < 0 ist. Hier ist mein Plot:Füllung über/unter Matplotlib Liniendiagramm
Wie Sie sehen können, kann ich die blaue Farbe erhalten richtig zu füllen, aber ich kann nicht die rote Farbe bekommen richtig zu füllen. Hier ist der Grund-Code 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 kann ich den Bereich von einem positiven y-Wert auf der x-Achse erhalten werden blau und die Fläche von einem negativen y-Wert auf der x-Achse rot sein? Danke für die Hilfe.
Ich glaube, die letzte Zeile im Code-Snippet sollte 'ax.fill_between (xs, ys, wobei = ys <= d, color = 'red')' sein, da Sie jetzt versuchen, den Bereich zwischen 'y1 zu füllen = 0' und 'y2 = 0' (dh keine Fläche). Das zweite Argument (in diesem Fall 'ys') wird an den Parameter 'y1' übergeben, und da 'y2' den Standardwert '0' hat, füllt die Methode den Bereich _zwischen_ dem Array, das Sie für 'y1' und den Parameter ' Linie y = 0, was du willst. – hooy
Danke für die Hilfe. Dein Vorschlag hat teilweise funktioniert. Allerdings gebe ich immer noch nicht die richtige Farbfüllung in Fällen, wo ein Punkt sagt, (10, 10) ist mit einem anderen Punkt verbunden, der die x-Achse kreuzt, sagen wir (11, -10). Hier ist, wie die Handlung aussieht: http://postimg.org/image/u329jhlob/ – user1728853
Ah, ich dachte, das ist, was Sie wollten, zu sehen, wie Sie sagten, die blaue Füllung auf der obigen Abbildung war richtig. Dies sollte eine einfache Lösung sein: 'ax.fill_between (xs, ys, wo = ys <= d, interpolieren = True, color = 'red')'. Der Parameter interpolieren bewirkt, dass die Funktion interpoliert, um den Schnittpunkt zwischen den Arrays "y1" und "y2" zu finden, um eine "glattere" Darstellung zu erhalten. – hooy