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

如何在Matplotlib Pyplot中手动调整分类X轴刻度位置以居中显示数据?

调整Matplotlib双Y轴散点图的X轴刻度位置

要解决数据点与刻度位置不居中的问题,你可以通过手动设置X轴数值坐标的偏移量来调整刻度和数据点的对应位置,具体实现如下:

核心思路

Matplotlib处理分类X轴时,默认会将每个分类映射到0、1、2...的数值位置。我们可以先基于数值坐标绘制数据,再手动偏移刻度位置,并让数据点同步对齐到偏移后的位置,以此实现Cat1右移、Cat2左移的效果。

修改后的完整代码

from matplotlib import pyplot as plt

# 定义X轴底层数值坐标,用于后续偏移调整
x_num = [0, 1]
# 分类标签
x_labels = ['Cat1', 'Cat2']

y1 = [12, 23]
y2 = [0.1, 0.06]

uplims_y1 = [2, 3]
lolims_y1 = [5, 1]

uplims_y2 = [0.01, 0.01]
lolims_y2 = [0.03, 0.02]

yerror_y1 = [lolims_y1, uplims_y1]
yerror_y2 = [lolims_y2, uplims_y2]

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()

# 自定义刻度偏移后的位置(可根据视觉效果调整数值)
tick_positions = [0.2, 0.8]

# 第一组数据:使用偏移后的位置绘制散点和误差棒
ax1.scatter(tick_positions, y1, color='b')
ax1.errorbar(tick_positions, y1, yerr=yerror_y1, capsize=10, ecolor='b', ls='none')

# 第二组数据:同样使用偏移后的位置
ax2.scatter(tick_positions, y2, color='r')
ax2.errorbar(tick_positions, y2, yerr=yerror_y2, capsize=10, ecolor='r', ls='none')

# 绑定偏移后的位置与分类标签
ax1.set_xticks(tick_positions)
ax1.set_xticklabels(x_labels)

# 设置轴标签
ax1.set_ylabel('Y1', color='b')
ax2.set_ylabel('Y2', color='r')

plt.show()

关键细节说明

  • tick_positions:示例中设置为[0.2, 0.8],你可以根据图表宽度调整数值(比如改成[0.3, 0.7]),直到数据点与刻度视觉上完全居中对齐。
  • 所有绘制数据的函数(scatter、errorbar)必须使用偏移后的tick_positions作为X坐标,确保数据点与刻度位置一一对应。
  • 通过set_xticks和set_xticklabels完成数值位置到分类标签的绑定,实现刻度的偏移调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:15:40