Matplotlib Pyplot共享X轴时,如何单独移动Y轴刻度标签?
Matplotlib共享X轴子图Y刻度标签重叠的解决方法
当使用Matplotlib绘制共享X轴的两个子图且设置hspace=0时,上下子图的Y轴刻度标签容易出现重叠问题。以下是两种通过移动刻度标签位置解决该问题的实用方案,无需调整子图间距或轴范围:
方法一:全局调整刻度标签间距(pad参数)
通过tick_params的pad参数,统一调整Y轴刻度标签与轴的距离,让重叠的标签相互错开。修改后的完整代码如下:
import numpy as np import matplotlib.pyplot as plt diagramm, axes = plt.subplots(nrows=2, sharex='col', gridspec_kw={'hspace': 0, 'wspace': 0}) axes[1].set_xlim([0,10]) axes[0].set_ylim(-1.0,1.0) axes[1].set_ylim(-0.01,0.01) xval = np.linspace(0,10,100) axes[0].plot(xval, np.sin(xval), color="red") axes[1].plot(xval, 0.01*np.sin(xval), color="blue") # 调整上方子图Y轴刻度标签与轴的间距,让底部标签下移 axes[0].tick_params(axis='y', pad=12) # 调整下方子图Y轴刻度标签与轴的间距,让顶部标签上移 axes[1].tick_params(axis='y', pad=12) plt.show()
pad参数的数值可根据实际显示效果调整,数值越大,标签离轴的距离越远。
方法二:精准调整单个重叠标签
如果只想移动重叠的那两个特定标签(上方子图的最低Y刻度、下方子图的最高Y刻度),可以直接获取对应标签对象并修改位置:
import numpy as np import matplotlib.pyplot as plt diagramm, axes = plt.subplots(nrows=2, sharex='col', gridspec_kw={'hspace': 0, 'wspace': 0}) axes[1].set_xlim([0,10]) axes[0].set_ylim(-1.0,1.0) axes[1].set_ylim(-0.01,0.01) xval = np.linspace(0,10,100) axes[0].plot(xval, np.sin(xval), color="red") axes[1].plot(xval, 0.01*np.sin(xval), color="blue") # 移动上方子图的最低Y刻度标签向下(归一化坐标,0为轴底,1为轴顶) ytick_labels_top = axes[0].get_yticklabels() ytick_labels_top[0].set_position((ytick_labels_top[0].get_position()[0], -0.08)) # 移动下方子图的最高Y刻度标签向上 ytick_labels_bottom = axes[1].get_yticklabels() ytick_labels_bottom[-1].set_position((ytick_labels_bottom[-1].get_position()[0], 1.08)) plt.show()
通过设置小于0或大于1的归一化Y坐标,让标签移到轴外区域,避免与另一子图的标签重叠。
内容的提问来源于stack exchange,提问作者Toffomat
相关产品推荐
相关产品推荐

