Python 如何格式化x轴以在主刻度上显示每年

Python 如何格式化x轴以在主刻度上显示每年,python,pandas,matplotlib,plot,Python,Pandas,Matplotlib,Plot,我已经尝试删除了所有的集合,或者网格选项,只是绘制数据帧,我无法让X轴停止跳过年份 索引为日期戳YYYY-MM-DD,列均为浮点数 在轴上处理日期时间数据时,应使用matplotlib.dates 使用所示的实现 datemin和datemax必须采用日期时间格式,才能被DateFormatter识别。同样地,使用np.datetime64(data.index.array[0],'Y'),结果是numpy.datetime64('2021'),其中Asdata.index.year.mi

我已经尝试删除了所有的集合,或者网格选项,只是绘制数据帧,我无法让X轴停止跳过年份

索引为日期戳YYYY-MM-DD,列均为浮点数

  • 在轴上处理日期时间数据时,应使用
    matplotlib.dates
  • 使用所示的实现
  • datemin
    datemax
    必须采用日期时间格式,才能被
    DateFormatter
    识别。同样地,使用
    np.datetime64(data.index.array[0],'Y')
    ,结果是
    numpy.datetime64('2021')
    ,其中As
    data.index.year.min()
    结果是
    int
导入matplotlib.pyplot作为plt
将matplotlib.dates导入为mdates
将numpy作为np导入
作为pd进口熊猫
#创建一个示例数据帧
data=pd.DataFrame({'v1':[10]*4000,'v2':[20]*4000},index=pd.bdate_范围('2021-01-11',freq='D',periods=4000))
years=mdate.YearLocator()#每年
年份\u fmt=mdates.DateFormatter(“%Y”)
#创建绘图
ax=数据.绘图.面积(x='date',figsize=(8,6))
#仅在主刻度上设置年份刻度的格式
ax.xaxis.set\u major\u定位器(年)
ax.xaxis.set\u major\u formatter(年份\u fmt)
#四舍五入到最近的年份。此外,索引必须按日期时间格式排序。
datemin=np.datetime64(data.index.array[0],“Y”)
datemax=np.datetime64(data.index.array[-1],'Y')+np.timedelta64(1,'Y'))
#设置x轴限制
ax.set\u xlim(datemin,datemax)
#如果需要,打开栅格
ax.grid(真)
plt.show()
格式化图

无格式图
ax=data.plot.area(figsize=(8,6))

ax = Export_DF.plot.area()

ax.grid(color='black',alpha=.3)
ax.grid(which='minor', linestyle=':', linewidth='0.5', color='black')

major_ticks = np.arange(0, 101, 20)
minor_ticks = np.arange(0, 101, 5)

ax.set_yticks(major_ticks)
ax.set_yticks(minor_ticks, minor=True)

X_Dates = []
for i in range(12):
    X_Dates.append(pd.to_datetime('1/1/'+str(2010+i)))
ax.xticks(X_Dates)
ax.set_xticks(X_Dates,minor=True)

ax.grid(which='minor', alpha=0.3)
ax.grid(which='major', alpha=0.5)

handles, labels = ax.get_legend_handles_labels()
ax.legend(reversed(handles), reversed(labels),bbox_to_anchor=(1.02, 1))  # reverse both handles and labels

for i in range(len(Export_DF)):
    temp_series = Export_DF.iloc[i]
    temp_x_cord = temp_series.name
    count = [0]
    for j in temp_series:
        if j != 0:
            count.append(count[-1]+j)
            ax.annotate(str(round(j,1)),(temp_x_cord,(count[-1]+count[-2])/2),size=8,ha='center')

plt.show()