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

如何让Matplotlib子图的x轴刻度相互对齐?

解决垂直小提琴图x轴刻度对齐问题

你的问题出在每个子图的x轴范围没有统一——matplotlib会根据子图的自动数据范围调整轴的显示,哪怕设置了相同的刻度,范围不同也会导致刻度错位。

修复方法

给所有子图设置统一的x轴范围即可,两种实现方式任选:

方案1:批量设置所有子图

在fig.tight_layout()之前添加一行代码,一次性统一所有子图的x轴范围:

# 统一x轴范围为0到10,和你设置的刻度匹配
plt.setp(axs, xlim=(0, 10))

方案2:单独给每个子图设置

在每个子图的配置代码后,添加x轴范围设置,比如:

axs[0].set_xlim(0, 10)

其余三个子图重复这行代码即可。

优化后的完整代码

可以用循环简化重复代码,让结构更清晰:

import matplotlib.pyplot as plt

# 按分类整理数据(假设你已定义jazz、experimental等变量)
genre_info = [
    ('Jazz', jazz['score']),
    ('Experimental', experimental['score']),
    ('Folk/Country', folk_country['score']),
    ('Rock', rock['score'])
]

fig, axs = plt.subplots(nrows=4, figsize=(6,12))

for ax, (title, data) in zip(axs, genre_info):
    ax.violinplot(data, points=20, widths=0.3, showmeans=True, vert=False)
    ax.set_title(title, fontsize=10)
    ax.set_xticks(range(11))
    ax.set_yticks([])  # 替代range(0),写法更直观
    ax.set_xlim(0, 10)  # 强制统一x轴范围

fig.suptitle("Violinplots by genre")
fig.tight_layout(pad=2.08);

这样修改后,所有子图的x轴刻度就会完全对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:12:19