我需要在x轴上画出年份。我的时间数组看起来像
array([cftime.DatetimeProlepticGregorian(2002, 8, 1, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeProlepticGregorian(2002, 8, 2, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeProlepticGregorian(2002, 8, 3, 0, 0, 0, 0, has_year_zero=True),
...,
cftime.DatetimeProlepticGregorian(2022, 10, 29, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeProlepticGregorian(2022, 10, 30, 0, 0, 0, 0, has_year_zero=True),
cftime.DatetimeProlepticGregorian(2022, 10, 31, 0, 0, 0, 0, has_year_zero=True)],
dtype=object)
当我绘图时:
df = pd.DataFrame({"Date": date_time.astype(str),
"Value": values})
fig, ax = plt.subplots(1,1,figsize=(15,3))
#df.Date.astype(str)
plt.set_loglevel('WARNING')
ax.plot(df.Date, df.Value, linestyle='dotted')
ax.xaxis.set_major_locator(YearLocator(1, month=1, day=5)) # Tick locator #, day=10
我得到1
但是,我只想在x轴上显示年份。
我尝试的是,将日期时间转换为pandas索引,然后转换为数值
year = pd.DatetimeIndex(date_time).year
dt = pd.to_numeric(year)
而我得到
发生这种情况是因为,我的数据只使用3个月作为连续数组,而不是全年,但我希望这3个月看起来每年都是连续的。也就是说,由于数据是不连续的,我无法设置/使用pd.date_range(start = '2002-08- 01',end = '2022-08- 23',freq = 'D'),数组的长度变为7397,而我的是1900(因为它只使用3个月的数据)。我如何自定义Pandas的时间索引只是八月,九月,十月和循环,以获得一个连续的数组图?
总而言之,我希望在顶部图像中的图看起来像是一个日常的图,而x轴只作为年份,这样它就可以容纳更多的年份来可视化。
任何帮助将高度赞赏非常感谢
更新1:在完成@matt的建议后,它在x轴上回答了年份,但由于数据有中断并且只使用了几个月,因此图像看起来像3
1条答案
按热度按时间pqwbnv8z1#
例如,在this answer中,我认为您需要更改的只是切换
为:
也就是说,只需要将年份定位器指定为每年,并将日期的格式设置为只显示年份。
如果图中的日期从1970年开始有问题,那么可以将
date_time.astype(str)
Package 在pd.to_datetime()
中,例如,