Pandas – Barchat horizontal astackdo para la línea de tiempo?

Estoy pensando en crear una línea de tiempo para mostrar los cambios de estado de algunos artículos.

línea de tiempo

Para cada elemento, tengo una lista de eventos, por ejemplo:

  • 08:00 – El artículo A ahora está en estado ROJO
  • 08:00 – El artículo B está ahora en estado VERDE
  • 08:55 – El artículo B está ahora en estado PÚRPURA
  • 09:00 – El artículo A está ahora en estado AZUL
  • 09:22 – El artículo A está ahora en estado AMARILLO
  • 10:20 – El artículo B está ahora en estado ROJO, etc.

Estoy usando pandas, y estaba pensando en usar los gráficos de barras horizontales astackdos ( http://pandas.pydata.org/pandas-docs/stable/visualization.html#bar-plots ):

pandas apiladas horizontal barchart

Sin embargo, el gráfico de barras en este caso está respaldado por un dataframe como este:

In [17]: df2 Out[17]: abcd 0 0.865681 0.276997 0.691200 0.077541 1 0.863821 0.465361 0.076636 0.013124 2 0.266339 0.359055 0.237709 0.698812 3 0.880864 0.198044 0.807911 0.889326 4 0.253440 0.080855 0.206936 0.603920 5 0.121422 0.880760 0.492782 0.841651 6 0.151359 0.264984 0.249734 0.136582 7 0.222347 0.007675 0.978766 0.267517 8 0.102839 0.847454 0.775913 0.519219 9 0.118314 0.347371 0.314426 0.308254

No estoy seguro de cuál es la forma más eficiente en pandas de asignar mi cronogtwig de eventos a algo y trazarlo. Supongo que podría convertir las marcas de tiempo en duración (por ejemplo, número de segundos), pero preferiría que el eje x muestre las marcas de tiempo según el primer ejemplo anterior, por lo que puede que no funcione.

¿Hay algo mejor de hacer esto?

 fig, ax = plt.subplots() df.plot(kind='barh', stacked=True, ax=ax) ax.set_yticklabels(['A', 'B', 'C', 'D', 'E', 'F']) time = pd.date_range(start=pd.to_datetime('07:00', format='%H:%M'), end=pd.to_datetime('13:00', format='%H:%M'),freq='H') time_x = [dt.strftime('%H:%M') for dt in time] ax.set_xticklabels(time_x) fig.autofmt_xdate() plt.show() 

introduzca la descripción de la imagen aquí