You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib Subplot2Grid共享轴后无法控制轴刻度标签问题

解决方案:共享轴下独立控制刻度标签显示

共享轴时,set_xticklabels()/set_yticklabels()会同步修改所有绑定的共享轴刻度内容,这是你遇到问题的核心原因。正确做法是通过tick_params()控制单轴的刻度标签显示状态,而非修改刻度内容。

一、处理柱状图的X轴刻度标签

只保留最后一个柱状图(ax4)的X轴刻度标签,隐藏前三个(ax1、ax2、ax3)的标签:

# 前三个柱状图隐藏X轴刻度标签
ax1.tick_params(labelbottom=False)
ax2.tick_params(labelbottom=False)
ax3.tick_params(labelbottom=False)

# 最后一个柱状图正常设置X轴标签(保留你的原有代码)
ax4.set_xticks(np.arange(len(df_bars)))
ax4.set_xticklabels(df_bars['Reach Number'])

二、处理散点图的Y轴刻度标签

只保留最左侧散点图(ax5)的Y轴刻度标签,隐藏右侧两个(ax6、ax7)的标签:

# 右侧两个散点图隐藏Y轴刻度标签
ax6.tick_params(labelleft=False)
ax7.tick_params(labelleft=False)

# ax5正常设置Y轴标签(按需添加)
# ax5.set_ylabel('散点图Y轴标签')

修改后的完整代码片段(关键部分)

# figure setup
fig = plt.figure()
fig.set_figheight(15)
fig.set_figwidth(9)
 
ax1 = plt.subplot2grid(shape=(6, 3), loc=(0, 0), colspan=3)
ax2 = plt.subplot2grid(shape=(6, 3), loc=(1, 0), colspan=3, sharex=ax1)
ax3 = plt.subplot2grid(shape=(6, 3), loc=(2, 0), colspan=3, sharex=ax1)
ax4 = plt.subplot2grid(shape=(6, 3), loc=(3, 0), colspan=3, sharex=ax1)
ax5 = plt.subplot2grid(shape=(6, 3), loc=(5, 0))
ax6 = plt.subplot2grid(shape=(6, 3), loc=(5, 1), sharex=ax5, sharey=ax5)
ax7 = plt.subplot2grid(shape=(6, 3), loc=(5, 2), sharex=ax5, sharey=ax5)

# plotting bars here

# first bar plot
ax1.set_title('Inundation area')
ylbl0 = 'Inundation area \n' + r'$(km^2)$'
ax1.set_ylabel(ylbl0) 
ax1.tick_params(labelbottom=False)  # 新增:隐藏X轴标签

# 处理ax2、ax3
ax2.set_title('第二个柱状图标题')
ax2.set_ylabel('对应Y轴标签')
ax2.tick_params(labelbottom=False)  # 新增:隐藏X轴标签

ax3.set_title('第三个柱状图标题')
ax3.set_ylabel('对应Y轴标签')
ax3.tick_params(labelbottom=False)  # 新增:隐藏X轴标签

# last bar plot
ax4.set_title(r'$\Delta$ Shear Stress')
ax4.set_xticks(np.arange(len(df_bars)))
ax4.set_xticklabels(df_bars['Reach Number'])
ax4.invert_xaxis()
ax4.axhline(y=0,c='k',lw = 0.5)
ax4.set_xlabel('Reach number')
ax4.set_ylabel('% change \n (2019-2020)')

# 处理散点图
# ax5.scatter(...)
ax5.set_ylabel('散点图Y轴标签')
# ax6.scatter(...)
ax6.tick_params(labelleft=False)  # 隐藏Y轴标签
# ax7.scatter(...)
ax7.tick_params(labelleft=False)  # 隐藏Y轴标签

原理说明

  • tick_params(labelbottom=False):仅修改当前轴的刻度标签显示状态,不会影响共享轴的其他子图,因为它操作的是轴的显示属性,而非刻度本身的内容。
  • set_xticklabels('')会直接修改共享轴的刻度文本内容,导致所有绑定的轴同步变化,这就是你之前操作失效的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:00:58