Pyplot双Y轴科学计数法标识位置调整问题
解决Matplotlib双Y轴科学计数法偏移量位置问题
当右侧Y轴启用科学计数法后,默认的偏移量(如1e7)会显示在轴顶部,和右侧刻度位置不一致,你可以通过调整偏移量文本的对齐方式和位置来解决:
核心步骤
- 获取右侧Y轴的科学计数法偏移量文本对象
- 设置文本的水平对齐为右,并调整其水平位置偏移
完整示例代码
import matplotlib.pyplot as plt import numpy as np # 生成测试数据 x = np.linspace(0, 10, 100) y1 = np.sin(x) y2 = np.sin(x) * 1.6e7 # 大数值触发科学计数法 fig, ax1 = plt.subplots() # 配置左侧Y轴 ax1.plot(x, y1, color='tab:blue') ax1.set_ylabel('左侧轴数值', color='tab:blue') ax1.tick_params(axis='y', labelcolor='tab:blue') # 配置右侧Y轴 ax2 = ax1.twinx() ax2.plot(x, y2, color='tab:red') ax2.set_ylabel('右侧轴数值', color='tab:red') ax2.tick_params(axis='y', labelcolor='tab:red') ax2.yaxis.tick_right() # 将刻度移到右侧 # 调整科学计数法偏移量位置 offset = ax2.yaxis.get_offset_text() offset.set_horizontalalignment('right') # 设置水平右对齐 offset.set_x(1.1) # 向右偏移,可根据图表布局微调这个值(比如1.05、1.15) plt.tight_layout() plt.show()
补充说明
- 也可以用更简洁的写法:
ax2.yaxis.offsetText.set_ha('right')替代获取offset对象再设置对齐的步骤 set_x()的参数是相对轴的位置,1表示轴的最右侧,大于1的数值会让文本超出轴的范围,显示在右侧- 如果需要垂直居中,可额外设置
offset.set_verticalalignment('center'),不过默认一般已经是居中状态
内容的提问来源于stack exchange,提问作者Joe.Z
相关产品推荐
相关产品推荐

