Füllen Sie zwischen zwei vertikalen Linien in matplotlib

95

Ich habe die Beispiele in der matplotlibDokumentation durchgesehen , aber mir war nicht klar, wie ich ein Diagramm erstellen kann, das den Bereich zwischen zwei bestimmten vertikalen Linien ausfüllt.

Angenommen, ich möchte ein Diagramm zwischen x=0.2und erstellen x=4(für den gesamten yBereich des Diagramms). Soll ich verwenden fill_between, filloder fill_betweenx?

Kann ich die whereBedingung dafür verwenden?

Amelio Vazquez-Reina
quelle

Antworten:

186

Es klingt so axvspan, als ob Sie möchten , und nicht als Füllung zwischen Funktionen. Der Unterschied besteht darin, dass axvspan(und axhspan) die gesamte y- (oder x-) Ausdehnung des Diagramms ausfüllen, unabhängig davon, wie Sie zoomen.

Verwenden wir zum Beispiel, um axvspanden x-Bereich zwischen 8 und 14 hervorzuheben:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, alpha=0.5, color='red')

plt.show()

Geben Sie hier die Bildbeschreibung ein

Sie könnten fill_betweenxdies verwenden, aber die Ausmaße (sowohl x als auch y) des Rechtecks ​​würden in Datenkoordinaten angegeben . Bei axvspansind die y-Ausmaße des Rechtecks ​​standardmäßig 0 und 1 und werden in Achsenkoordinaten angegeben (mit anderen Worten, Prozentsätze der Höhe des Diagramms).

Um dies zu veranschaulichen, lassen Sie das Rechteck von 10% bis 90% der Höhe reichen (anstatt die volle Ausdehnung einzunehmen). Versuchen Sie zu zoomen oder zu schwenken, und beachten Sie, dass die y-Bereiche im Anzeigebereich festgelegt sind, während sich die x-Bereiche mit dem Zoom / Schwenken bewegen:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, ymin=0.1, ymax=0.9, alpha=0.5, color='red')

plt.show()

Geben Sie hier die Bildbeschreibung ein

Joe Kington
quelle
3
Personen, die an einer Lösung fill_betweenfür "wackeligere" vertikale Linien interessiert sind, werfen einen Blick auf den transformParameter (und diese Antwort )
Herr Tsjolder