pandas 在线图中设置日期/时间格式

pn9klfpd  于 2023-05-12  发布在  其他
关注(0)|答案(2)|浏览(115)

我在格式化x轴标签时遇到一些问题。我想格式化标签,以显示日期,以显示小时,但也日期在YYYY-MM-DD。
验证码:

df1.plot.line(y='val1', ax=ax1);
df2.plot.line(y='val1', ax=ax2, legend=False);
plt.suptitle('Some plot ' + str(time[0]) + ' - ' + str(time[1]), fontsize=16, y=1);

#ax1.yaxis.grid(False)
#ax2.yaxis.grid(False)
ax1.grid(linestyle='--', linewidth=0.75)
ax1.spines['right'].set_visible(False)
ax1.spines['top'].set_visible(False)
ax2.set_xlabel('Date-Time')
#ax2.xaxis.set_major_locator(md.MonthLocator())
#ax2.xaxis.set_major_formatter(md.DateFormatter('%Y-%m'))
ax2.spines['right'].set_visible(False)
ax2.spines['top'].set_visible(False)
ax2.grid(linestyle='--', linewidth=0.75)
ax1.legend(bbox_to_anchor=(1.05, 1));
ax2.legend(bbox_to_anchor=(1.05, 1));
ax1.set_title('ClientAB=0');
ax2.set_title('ClientAB=1');

我希望时间保持不变,但我希望日期从5月16日更改为2022-05-16。我试过使用mdates中的格式化程序,但它显示的年份不正确,比如3226而不是2022。
我的 Dataframe 中索引的样子的示例

sd2nnvve

sd2nnvve1#

虽然我无法复制您的图,但有一种方法可以更改x-ticks格式:

# Toy dataframe
import pandas as pd

df = pd.DataFrame(
    {
        "date_time": [
            "2022-05-15 08:00:00",
            "2022-05-15 11:00:00",
            "2022-05-15 15:00:00",
            "2022-05-15 19:00:00",
        ],
        "val1": [4, 3, 9, 14],
    }
)

df["date_time"] = pd.to_datetime(df["date_time"])
from matplotlib import pyplot as plt

fig, ax = plt.subplots(nrows=1, ncols=1)

ax.plot(df["date_time"], df["val1"])

plt.shpw()

其输出:

现在,相同的代码加上这些额外的行:

ax.set_xticks(ticks=df["date_time"])
ax.set_xticklabels(df["date_time"].apply(lambda x: x.strftime("%H:%M\n%Y-%m-%d")))

你会得到:

g52tjvyc

g52tjvyc2#

受上面答案的启发,我发现了一种方法,可以在处理时间序列时调整线图的格式和x记号的频率。

ax.xaxis.set_major_locator(md.HourLocator(interval=8))
ax.xaxis.set_major_formatter(
    md.DateFormatter("%Y-%d-%m %H:%M")
)
ax.set_xlim(pd.Timestamp('2022-06-03 16:00:00'), pd.Timestamp('2022-06-06 10:00:00'))

例如,上面的一段代码可以帮助您设置您希望您的刻度显示的频率。每8小时。本例中使用的格式化程序将以简短格式(yyyy/mm/dd)绘制日期以及小时和分钟。

相关问题