在pandas plot创建时跳过gcf().autofmt_xdate()

ale*_*317 4 python plot matplotlib pandas

我正在尝试使用pandas数据框绘制多个时间序列.数据帧包含100多个寄存器.

从熊猫的文档中我已经读过,当执行pandas.df.plot()时,这也是用gcf().autofmt_xdate()执行的.我想放置我的自定义日期时间格式但是当我尝试自定义日期格式时,重叠超过了pandas plot默认给出的日期.¿有没有办法在剧情创作中跳过gcf().autofmt_xdate()?¿我怎样才能为熊猫提供自定义日期时间格式?

这是生成的图.

在此输入图像描述

这是python代码.

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
from pandas import Series
import pickle
datos = pickle.load(open("datos_reporte.pickle", "r"))
reload(plt)
series_o = []
series_p_h = []
series_p_d = []
series_names = []
for cod_estacion in datos.keys():
    x = [d[0] for d in datos[cod_estacion]['historial_semanal']]
    y = [d[1] for d in datos[cod_estacion]['historial_semanal']]
    s = Series(y, x)
    series_o.append(s.groupby(level=0).first())

df1 = pd.concat(series_o, join='outer', axis=1)
interval  = int(len(df1) / 12)
df1.columns = series_names
ax = plt.figure(figsize=(7,5), dpi=100).add_subplot(111)
df1.plot(ax=ax)
ax.xaxis.set_major_locator(mdates.HourLocator(interval=200))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d-%H:%S'))
ax.xaxis.grid(True, which="minor")
plt.title("Datos observados")
plt.ylabel('Caudal m^3/s')
plt.xlabel('Fecha')
plt.legend(loc=0,prop={'size': 7})
plt.xticks(rotation='vertical', fontsize = 8)
plt.subplots_adjust(bottom=.2)
plt.show()
Run Code Online (Sandbox Code Playgroud)

CT *_*Zhu 5

我想你可以在制作新的之前清除所有的滴答声:

df=pd.DataFrame({'A':np.random.random(20), 'B':np.random.random(20)})
df.index=pd.date_range('1/1/2014', periods=20, freq='5H')
ax = plt.figure(figsize=(7,5), dpi=100).add_subplot(111)
df.plot(ax=ax)
ax.set_xticks([])
ax.set_xticks([], minor=True)
ax.xaxis.set_major_locator(mdates.HourLocator(interval=200))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d-%H:%S'))
ax.xaxis.grid(True, which="minor")
plt.xticks(rotation='vertical', fontsize = 8)
plt.subplots_adjust(bottom=.2)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑

现在标签已关闭.ax.xaxis.set_major_formatter(mdates.DateFormatter('%y/%m/%d-%H:%S'))将显示他们是1991/01/11等.

df=pd.DataFrame({'A':np.random.random(20), 'B':np.random.random(20)})
df.index=pd.date_range('1/1/2014', periods=20, freq='5H')
ax = plt.figure(figsize=(7,5), dpi=100).add_subplot(111)
ax.plot(df.index.to_pydatetime(), df.A, label='A')
ax.plot(df.index.to_pydatetime(), df.B, label='B')
ax.legend()
ax.xaxis.set_major_locator(mdates.HourLocator(interval=5))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%y/%m/%d-%H:%S'))
ax.xaxis.grid(True, which="major")
ax.yaxis.grid(True, which="major")
plt.xticks(rotation='vertical', fontsize = 8)
plt.subplots_adjust(bottom=.2)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述