如何让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
相关产品推荐
相关产品推荐

