2011-11-25 16 views
23

Tworzę wizualizację historycznych danych giełdowych dla projektu i chciałbym podkreślić obszary kropli. Na przykład, gdy w magazynie wystąpi znacząca wypłata, chciałbym zaznaczyć to czerwonym regionem.Czy na wykresie matplotlib można wyróżnić określone zakresy wartości x?

Czy mogę to zrobić automatycznie, czy będę musiał narysować prostokąt lub coś w tym stylu?

+0

Można automatycznie narysować prostokąt ... Czy masz już wartości x, które definiują start/stop z podświetlaniem się do regionu? Jeśli tak, możesz narysować poprawkę Prostokąt, aby zaznaczyć tę sekcję (daj mi znać, jeśli potrzebujesz przykładu!). – Daan

Odpowiedz

45

Spójrz na axvspan (i axhspan dla podświetlenia regionu osi y).

import matplotlib.pyplot as plt 

plt.plot(range(10)) 
plt.axvspan(3, 6, color='red', alpha=0.5) 
plt.show() 

enter image description here

Jeśli używasz terminów, następnie trzeba konwertować MIN i MAX wartości x do matplotlib dat. Użyj obiektów matplotlib.dates.date2num dla datetime lub matplotlib.dates.datestr2num dla różnych sygnatur czasowych ciągów.

import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 
import datetime as dt 

t = mdates.drange(dt.datetime(2011, 10, 15), dt.datetime(2011, 11, 27), 
        dt.timedelta(hours=2)) 
y = np.sin(t) 

fig, ax = plt.subplots() 
ax.plot_date(t, y, 'b-') 
ax.axvspan(*mdates.datestr2num(['10/27/2011', '11/2/2011']), color='red', alpha=0.5) 
fig.autofmt_xdate() 
plt.show() 

enter image description here

+0

Używam dat dla mojej osi X i mam problemy z jej działaniem. Jakieś wskazówki? – Alex

+0

Zobacz edycję. Konieczne będzie przekonwertowanie dat na wewnętrzny format daty matplotlib (jest to po prostu liczba zmiennoprzecinkowa, gdzie zakres 1 odpowiada jednemu dniu). Spójrz na 'matplotlib.dates' dla różnych funkcji, aby sobie z tym poradzić. Mam nadzieję, że pomaga! –

+0

Czy można to zrobić na wykresie 3D? Chciałbym podświetlić płaszczyznę XY dla określonego plastra wzdłuż osi Z. – Kartik

Powiązane problemy