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

Matplotlib使用secondary_yaxis添加次Y轴时如何对齐水平网格线

要实现主次Y轴刻度和水平网格线完全对齐,只需强制次Y轴的刻度由主Y轴刻度按你定义的换算规则转换而来即可,修改后的代码如下:

import numpy as np
import matplotlib.pyplot as plt
x, y = np.random.random((2,50))
fig, ax = plt.subplots()
ax.scatter(x, y*10, s=50, cmap='viridis')
ax.set_xlabel('X1_z')
ax.set_ylabel('x1_y')
ax.set_title('Adding secondary y-axis')
def a2b(y):
    return y/2.5
def b2a(y):
    return 2.5*y
secax = ax.secondary_yaxis('right', functions=(a2b,b2a))
secax.set_ylabel('x2_y')
# 新增以下两行实现刻度对齐
main_yticks = ax.get_yticks()
secax.set_yticks(a2b(main_yticks))
plt.show()

默认情况下matplotlib会为次Y轴独立生成最优刻度,没有和主Y轴的刻度逻辑绑定,所以会出现错位。手动读取主Y轴当前的刻度值,用你定义的a2b换算成次Y轴对应值后,直接设置为次Y轴的刻度,就能保证两个轴的刻度点完全对应同一水平网格线,同时也能直观展示两个轴的换算比例。

如果有动态调整主Y轴范围的需求,可以将上述两行刻度设置的逻辑绑定到Y轴范围变化的事件回调中,即可实现动态对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:09:00