matplotlib 我有一个dateTime作为 Dataframe 中的索引,我只想使用小时作为xtick标签

oxcyiej7  于 2023-03-03  发布在  其他
关注(0)|答案(2)|浏览(133)

我在线图中有一些时间序列数据,我想编辑xtick,以便它们显示完整的日期,或者至少显示每个数据点的小时。数据由一个dateTime列索引,如下所示:

Hourly_diff
dateTimeUtc                           
2022-09-01 00:00:00+00:00         18.0
2022-09-01 01:00:00+00:00        -20.0
2022-09-01 02:00:00+00:00         56.0
                               ...
2022-10-01 17:00:00+00:00         69.0
2022-10-01 18:00:00+00:00       -465.0
2022-10-01 19:00:00+00:00       -617.0
2022-10-01 20:00:00+00:00        173.0
2022-10-01 21:00:00+00:00        378.0

然后我再画出来。

fig, ax = plt.subplots(figsize=(15, 7))
fig.suptitle('Error 1')
ax.set_xlabel('Hour')
plt.xticks(rotation = 45)
ax.set_ylabel('Error', rotation = 0)
ax.grid(alpha=0.25)
legs = day_1.columns[:]
ax.set_xticks(day_1.index)

for column in day_1:
    ax.plot(day_1.index, day_1[column])
    ax.legend(legs,loc = 'upper right')  
    
fig.tight_layout()
plt.show()

但是,我只得到索引的前4个字符。我希望显示完整的日期。或者...
有没有可能只把小时标为一个xtick标签,而不把它们都打出来,去掉其余的日期?
我尝试提取小时数,然后在set_xtick参数中调用它,如下所示。

hours = data_index.hour
ax.set_xtick(hours)

但是尽管图出现了,x轴是完全空白的,我没有得到一个错误。

utugiqy6

utugiqy61#

如果使用datetime作为自变量(x轴),则可以使用plot_date函数,如下所示:

import numpy as np

hours = data_index.hour # your hours vector
data = np.random.rand(24) # replace with your data

plt.plot_date(hours, data, fmt='H') #H to display hours
plt.setp(plt.gca().xaxis.get_majorticklabels(),
         'rotation', 90)
watbbzwu

watbbzwu2#

我通过创建自己的时间范围并绘制误差来解决这个问题,如下所示。

fig, ax = plt.subplots(figsize=(15, 7))
fig.suptitle('Error')
ax.set_xlabel('Time')
plt.xticks(rotation = 45)
ax.set_ylabel('Error', rotation = 0)
ax.grid(alpha=0.25)
legs = day_1.columns[:]
times = pd.date_range("00:00", "23:00", freq="60min").strftime('%H:%M')
#ax.set_xticklabels(day_1.index.hour)
for column in day_1:
    ax.plot(times, day_1[column])
    ax.set_xticks(hours)
    ax.legend(legs,loc = 'upper right')  
fig.tight_layout()
plt.show()

相关问题