2012-06-16 26 views
20

Tengo un conjunto de índices (x) de fechas (objetos datetime) y una matriz de valores reales (y: precios de los bonos). Hacer (en iPython):Anotar diagrama de series temporales en Matplotlib

plot(x,y) 

Produce un gráfico de serie de tiempo perfectamente fino con el eje x etiquetado con las fechas. No hay problema hasta el momento. Pero quiero agregar texto en ciertas fechas. Por ejemplo, en 2009-10-31 deseo mostrar el texto "Evento 1" con una flecha que apunta al valor y en esa fecha.

He leído la documentación Trough Matplotlib en texto() y anotar() en vano. Solo cubre ejes x numerados estándar, y no puedo inferir cómo trabajar esos ejemplos en mi problema.

Gracias

Respuesta

40

Matplotlib utiliza un formato de punto flotante interno para las fechas.

Solo necesita convertir su fecha a ese formato (usando matplotlib.dates.date2num o matplotlib.dates.datestr2num) y luego use annotate como de costumbre.

Como ejemplo algo en exceso de fantasía:

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

x = [dt.datetime(2009, 05, 01), dt.datetime(2010, 06, 01), 
    dt.datetime(2011, 04, 01), dt.datetime(2012, 06, 01)] 
y = [1, 3, 2, 5] 

fig, ax = plt.subplots() 
ax.plot_date(x, y, linestyle='--') 

ax.annotate('Test', (mdates.date2num(x[1]), y[1]), xytext=(15, 15), 
      textcoords='offset points', arrowprops=dict(arrowstyle='-|>')) 

fig.autofmt_xdate() 
plt.show() 

enter image description here

+0

Estimado Joe, maravillosa. ¡Gracias! – luffe

Cuestiones relacionadas