tutorial tablas para leer interval hacer graficas graficar grafica funciones español documentacion datos dates barras python pandas datetime matplotlib

python - tablas - Fecha de visualización del gráfico de línea del marco de datos de Pandas en xaxis



time pandas python (1)

Compare el siguiente código:

test = pd.DataFrame({''date'':[''20170527'',''20170526'',''20170525''],''ratio1'':[1,0.98,0.97]}) test[''date''] = pd.to_datetime(test[''date'']) test = test.set_index(''date'') ax = test.plot()

DateFormatter al final:

test = pd.DataFrame({''date'':[''20170527'',''20170526'',''20170525''],''ratio1'':[1,0.98,0.97]}) test[''date''] = pd.to_datetime(test[''date'']) test = test.set_index(''date'') ax = test.plot() ax.xaxis.set_minor_formatter(dates.DateFormatter(''%d/n/n%a'')) ## Added this line

El problema con el segundo gráfico es que comienza en 5-24 lugar de 5-25 . Además, 5-25 de 2017 es jueves no lunes. ¿Qué está causando el problema? ¿Está relacionada esta zona horaria? (No entiendo por qué los números de fecha se apilan uno encima del otro tampoco)


En general, las utilidades de fecha y hora de pandas y matplotlib son incompatibles. Por lo tanto, intentar usar un objeto matplotlib.dates en un eje de fecha creado con pandas en la mayoría de los casos fallará.

Una razón se ve, por ejemplo, en la documentación

datetime objetos de datetime se convierten en números de coma flotante que representan el tiempo en días desde 0001-01-01 UTC, más 1 . Por ejemplo, 0001-01-01, 06:00 es 1.25, no 0.25.

Sin embargo, esta no es la única diferencia y, por lo tanto, es aconsejable no mezclar pandas y matplotlib cuando se trata de objetos datetime.

Sin embargo, existe la opción de decirle a los pandas que no usen su propio formato de fecha y hora. En ese caso, es posible usar los tickers matplotlib.dates . Esto se puede dirigir a través de.

df.plot(x_compat=True)

Dado que los pandas no proporcionan capacidades de formato sofisticadas para fechas, se puede usar matplotlib para trazar y formatear.

import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as dates df = pd.DataFrame({''date'':[''20170527'',''20170526'',''20170525''],''ratio1'':[1,0.98,0.97]}) df[''date''] = pd.to_datetime(df[''date'']) usePandas=True #Either use pandas if usePandas: df = df.set_index(''date'') df.plot(x_compat=True) plt.gca().xaxis.set_major_locator(dates.DayLocator()) plt.gca().xaxis.set_major_formatter(dates.DateFormatter(''%d/n/n%a'')) plt.gca().invert_xaxis() plt.gcf().autofmt_xdate(rotation=0, ha="center") # or use matplotlib else: plt.plot(df["date"], df["ratio1"]) plt.gca().xaxis.set_major_locator(dates.DayLocator()) plt.gca().xaxis.set_major_formatter(dates.DateFormatter(''%d/n/n%a'')) plt.gca().invert_xaxis() plt.show()