2014-04-23 16 views
45

Sono passato attraverso lo examples nella documentazione matplotlib, ma non mi è chiaro come creare un grafico che riempia l'area tra due linee verticali specifiche.FIll tra due linee verticali in matplotlib

Ad esempio, supponiamo di voler creare una trama tra x=0.2 e x=4 (per l'intervallo completo della trama di). Devo usare fill_between, fill o fill_betweenx?

Posso usare la condizione where per questo?

risposta

75

Sembra che si desideri axvspan, anziché uno dei riempimenti tra le funzioni. Le differenze sono che axvspan (e axhspan) riempiranno l'intera dimensione y (o x) della trama indipendentemente dal modo in cui si esegue lo zoom.

Ad esempio, usiamo axvspan per evidenziare la x-regione tra 8 e 14:

import matplotlib.pyplot as plt 

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

plt.show() 

enter image description here

Si potrebbe utilizzare fill_betweenx per fare questo, ma le estensioni (xey) del rettangolo sarebbe in coordinate di dati. Con axvspan, le estensioni y del rettangolo sono predefinite su 0 e 1 e sono in coordinate degli assi (in altre parole, percentuali dell'altezza del grafico).

Per illustrare ciò, facciamo in modo che il rettangolo si estenda dal 10% al 90% dell'altezza (invece di occupare l'intera estensione). Prova lo zoom o la panoramica, e notare che le y-extent dicono fissati in spazio espositivo, mentre gli X-estensioni si muovono con lo zoom/pan:

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() 

enter image description here

+1

le persone che sono interessati a una soluzione da utilizzare 'fill_between' per più" wiggly ", linee verticali, dai un'occhiata al parametro' transform' (e [questa risposta] (http://stackoverflow.com/a/4891658/4375377)) –

Problemi correlati