如何使用matplotlib将双Y轴指定刻度对齐至同一水平位置
双Y轴指定刻度对齐实现方案
完全可以通过matplotlib实现该需求,核心逻辑是将两个Y轴的数值映射比例进行绑定,保证y1轴刻度6和y2轴刻度30在轴上的相对位置完全一致。你提供的场景中两个目标对齐值刚好是5倍关系,直接按比例设置两个轴的上下限即可实现需求,可直接运行以下代码:
import matplotlib.pyplot as plt # 测试数据,注意x轴元素为字符串需加引号 list_y1 = [ 7.31, 7.30,7.29, 7.29, 7.44, 8.05, 7.46, 7.79, 8.35, 8.95, 8.95, 8.37, 7.51, 8.34, 8.39, 8.41, 8.46, 8.69, 8.52, 8.51, 8.46, 8.97, 9.35, 9.32, 9.24, 9.46, 9.22, 9.16, 9.08, 9.00, 8.82, 8.57, 8.66, 8.79, 8.47, 8.58, 8.62, 8.66, 9.19, 9.20, 9.13, 9.43 ] list_y2 = [ 30.37, 30.51, 30.62, 30.52, 31.31, 33.82, 31.41, 32.78, 35.29, 37.85, 37.85, 35.36, 31.81, 35.35, 35.56, 35.61, 35.94, 36.36, 36.10, 35.81, 35.35, 37.14, 38.49, 38.34, 38.04, 38.90, 37.84, 37.58, 37.25, 36.90, 36.17, 35.12, 35.53, 36.06, 34.73, 35.15, 35.30, 34.64, 36.76, 36.81, 36.54, 37.71 ] list_x = [ "100Q1", "100Q2", "100Q3", "100Q4", "101Q1","101Q2", "101Q3", "101Q4", "102Q1", "102Q2", "102Q3", "102Q4", "103Q1", "103Q2", "103Q3","103Q4", "104Q1", "104Q2", "104Q3", "104Q4", "105Q1", "105Q2", "105Q3", "105Q4", "106Q1","106Q2", "106Q3", "106Q4", "107Q1", "107Q2", "107Q3", "107Q4", "108Q1", "108Q2", "108Q3","108Q4", "109Q1", "109Q2", "109Q3", "109Q4", "110Q1", "110Q2" ] # 创建画布和第一个Y轴 fig, ax1 = plt.subplots(figsize=(14,6)) # 绘制y1曲线 ax1.plot(list_x, list_y1, color='#1f77b4', label='Y1数据') ax1.set_xlabel('季度') ax1.set_ylabel('Y1数值', color='#1f77b4') ax1.tick_params(axis='y', labelcolor='#1f77b4') # 核心:设置y1轴上下限,下限为需要对齐的刻度值6 ax1.set_ylim(bottom=6, top=10) # 设置x轴刻度旋转,避免重叠 plt.xticks(rotation=45) # 创建第二个Y轴 ax2 = ax1.twinx() # 绘制y2曲线 ax2.plot(list_x, list_y2, color='#ff7f0e', label='Y2数据') ax2.set_ylabel('Y2数值', color='#ff7f0e') ax2.tick_params(axis='y', labelcolor='#ff7f0e') # 核心:按1:5的比例设置y2轴上下限,下限为需要对齐的刻度值30,上限对应y1的10即为50 ax2.set_ylim(bottom=30, top=50) # 添加图例 fig.legend(loc="upper right", bbox_to_anchor=(1,1), bbox_transform=ax1.transAxes) plt.tight_layout() plt.show()
运行上述代码后,y1轴的6刻度与y2轴的30刻度会完全对齐到同一水平高度,你也可以根据数据展示需要调整两个轴的上限数值,只要保证上下限的差值比例为1:5且下限分别为6、30,就能维持对齐效果。
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

