You need to enable JavaScript to run this app. Matplotlib设置x轴xticks仅展示每年年中位置的方法
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib设置x轴xticks仅展示每年年中位置的方法

问题描述

作为Python数据可视化方向的新手,在使用Matplotlib绘图时,希望x轴(xticks)仅在每一年的年中位置展示刻度。曾尝试使用date_range方法生成自定义刻度,但当前绘图结果中每年会同时显示两个x轴刻度,分别对应年初与年中位置,需要移除年初位置的多余x轴刻度,仅保留年中位置的目标刻度。
当前实际绘图效果为:x轴每年同时排布年初、年中两个刻度,不符合仅展示年中刻度的需求。

测试代码

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

# 设定画布尺寸
plt.figure(figsize = (30,16))

# 提取绘图用日期序列
dates = droughtMask["ValidStart"]

# 整理不同等级的干旱数据
droughtcat = {
    'D4 - 特大干旱': droughtMask["D4"],
    'D3 - 极端干旱': droughtMask["D3"],
    'D2 - 严重干旱': droughtMask["D2"],
    'D1 - 中等干旱': droughtMask["D1"],
    'D0 - 异常偏干': droughtMask["D0"]
}

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

# 设定x轴日期格式化规则
yearsFmt = mdates.DateFormatter("'%y")
ax.xaxis.set_major_formatter(yearsFmt)
# 可选:将y轴设置为百分比格式
#ax.yaxis.set_major_formatter(mtick.PercentFormatter())

# 调整图例位置
ax.legend(loc='upper left')

# 设定图表标题
ax.set_title('2005-2015年得克萨斯州干旱情况')

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

# 设定坐标轴标签
ax.set_xlabel('年份')
ax.set_ylabel('干旱强度')

# 保存图表文件
fig.savefig('DroughtPlot.jpg')

plt.show()

问题成因

  • pd.date_range设置freq='6M'时,默认以每6个月的月末为时间锚点,从起始日期2005-01-01开始,生成的时间点依次为2005-06-30、2005-12-31、2006-06-30,本身就包含年中、年末两类时间点
  • Matplotlib默认的日期定位器会自动在每年年初补充生成刻度,两类刻度叠加后,就出现了年初、年中同时显示刻度的问题

解决步骤

  • 调整自定义刻度生成逻辑:只取每年年中位置的时间点,剔除年末、年初的冗余时间,将原ticks生成代码替换为:
    # 以每年7月1日为年中刻度点(可根据需求调整为6月15日、6月30日等具体年中时间)
    ticks = pd.date_range(start='2005-07-01', end='2015-07-01', freq='AS-JUL')
    
  • 关闭Matplotlib自动刻度生成:屏蔽系统自带的自动日期定位,仅使用自定义的年中刻度,在设置刻度前增加代码:
    # 使用固定定位器绑定自定义刻度,覆盖默认的自动定位规则
    ax.xaxis.set_major_locator(mdates.FixedLocator(ticks))
    
  • 保留原有日期格式化规则,即可实现仅在年中位置显示带年份标识的刻度

注意:如果仍出现零散的冗余次要刻度,可执行ax.xaxis.set_minor_locator(mdates.NullLocator())清空次要刻度,避免额外刻度干扰绘图效果。


内容的提问来源于stack exchange,提问作者Buzquer B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 04:24:04