gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:45:30 26 4
gpt4 key购买 nike

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

我从 panda 的文档中了解到,当执行 pandas.df.plot() 时,也会使用 gcf().autofmt_xdate() 执行。我想使用我的自定义日期时间格式,但是当我尝试我的自定义日期格式时,我的自定义日期格式与 pandas plot 默认给出的日期重叠。 ¿有没有办法在情节创建时跳过 gcf().autofmt_xdate()? ¿如何为 Pandas 提供自定义日期时间格式?

这是生成的图。

enter image description here

这是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()

最佳答案

我认为你可以在创建新的之前清除所有的刻度:

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)

enter image description here

编辑

现在标签已关闭。 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)

enter image description here

关于python - 在 pandas plot 创建时跳过 gcf().autofmt_xdate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24337753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com