首页 > 解决方案 > 使用 Matplotlib 将 xticks 设置为给定年份的年中

问题描述

我是 Python 和可视化的新手,我试图让我的情节只在每年年中显示 xticks(见下面我的情节)。我用 date_range 尝试了几件事,但现在我的情节每年显示两个 xticks,一个用于年初,一个用于年中。我怎样才能摆脱每年年初的xticks,只保留每年年中的xticks?

这是我的代码和情节:

texasdrought['ValidStart']=pd.to_datetime(texasdrought['ValidStart'])
droughtMask = texasdrought[texasdrought['ValidStart'].dt.year.between(2005,2015)]

# Set the figure size
plt.figure(figsize = (30,16))

# Create a mask with the dates
dates = droughtMask["ValidStart"]

# Categorize droughts
droughtcat = {
    'D4 - Exceptional Drought': droughtMask["D4"],
    'D3 - Extreme Drought': droughtMask["D3"],
    'D2 - Severe Drought': droughtMask["D2"],
    'D1 - Moderate Drought': droughtMask["D1"],
    'D0 - Abnormally Dry': droughtMask["D0"]
}

fig, ax = plt.subplots()
ax.stackplot(dates, droughtcat.values(), labels=droughtcat.keys(),colors=['#660000','#FF0000','#FF6600','#FFCC99','#FFFF00'])

# Format y-axis to percentages
yearsFmt = mdates.DateFormatter("'%y")
ax.xaxis.set_major_formatter(yearsFmt)
#ax.yaxis.set_major_formatter(mtick.PercentFormatter())

# Add legend location
ax.legend(loc='upper left')

# Add title to the stackplot
ax.set_title('Drought in Texas (2005-2015)')

ticks = pd.date_range('2005-01-01', '2015-12-31', freq='6M')
plt.xticks(ticks)

# Add axis labels
ax.set_xlabel('Year')
ax.set_ylabel('Drought Intensity')

# Save figure as DroughtPlot.jpg
fig.savefig('DroughtPlot.jpg')

plt.show()

阴谋

谢谢你。

标签: pythonpandasmatplotlib

解决方案


改用这个:

ticks = pd.date_range('2005-01-01', '2015-12-31', freq='A-JUN')这将在中间月份的最​​后一个日期生成在每年中间结束的每月日期。

DatetimeIndex(['2005-06-30', '2006-06-30', '2007-06-30', '2008-06-30',
               '2009-06-30', '2010-06-30', '2011-06-30', '2012-06-30',
               '2013-06-30', '2014-06-30', '2015-06-30'],
              dtype='datetime64[ns]', freq='A-JUN')

推荐阅读