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

如何在Matplotlib中创建与原Y轴成固定缩放比例的次Y轴

修正后完整代码
import numpy as np
import matplotlib.pyplot as plt
x, y = np.random.random((2, 50))

fig, ax1 = plt.subplots()
# 绘制原始散点图
ax1.scatter(x, y * 10, c='b')
ax1.set_xlabel('X1_z')
ax1.set_ylabel('x1_y', color='g')

# 定义双向缩放规则
def primary_to_secondary(y):
    return y / 2.5
def secondary_to_primary(y):
    return y * 2.5

# 直接生成缩放次Y轴,无需额外绘图
ax2 = ax1.secondary_yaxis('right', functions=(primary_to_secondary, secondary_to_primary))
ax2.set_ylabel('x2_y', color='r')

plt.show()
问题对应解决说明
  • 次Y轴缩放比例不符合预期:原代码仅使用twinx()生成次轴,但没有绑定主次轴的数值映射关系,次轴会默认根据自身绘制的内容自动调整刻度,和主Y轴无关联。新方案使用secondary_yaxis的functions参数传入双向缩放规则,次轴刻度会严格按照y2=y1/2.5和主Y轴一一对应。
  • 次Y轴生成多余的多条水平线:多余线条来自冗余的ax2.plot(1, 1, 'w-')代码,虽然设置了白色不可见,但多次运行或画布缓存时会叠加生成多余线条,新方案无需在次轴上绘制任何内容,自然不会出现多余线条。
  • 无需添加ax2.plot(1, 1, 'w-')创建次轴:secondary_yaxis是Matplotlib专门用于生成映射型次轴的接口,仅通过数值规则就可以生成对应刻度,完全不需要在次轴上绘制占位图形,这行冗余代码可以直接删除。

内容的提问来源于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 05:45:03