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

Plots.jl子图调用twinx()实现双Y轴时link=:x联动异常问题

问题原因
  • twinx()的本质是生成一个与目标轴共享X轴的独立次轴对象,而非原轴的内置属性
  • 原代码的核心错误是变量覆盖:执行b = scatter!(twinx(), x, z, color = :orange, legend = false)时,scatter!的返回值是新生成的次轴对象,直接覆盖了之前存储绿色折线主图的b变量。最终传入布局的b仅为橙色散点对应的次轴,绘制绿色折线的主图轴没有被显式纳入布局管理
  • link=:x参数仅会对传入plot()的顶层子图轴生效,未被纳入布局列表的主图轴不会触发联动规则,最终出现轴范围错位、元素显示异常的问题
修正代码

不要用次轴对象覆盖原主图变量,显式指定twinx()绑定的主图,最后组装布局时传入主图对象即可:

using Plots

x = [3, 5, 7, 9]
y = [10, 20, 30, 40]
z = [-10, -20, -30, -40]

# 第一个子图
a = plot(1:10, color = :black, legend = false)

# 第二个子图主Y轴
b = plot(x, y, color = :green, legend = false)
# 绑定主图生成次Y轴,绘制散点时不覆盖原主图变量
b_twin = twinx(b)
scatter!(b_twin, x, z, color = :orange, legend = false)

# 传入主图组装布局,link=:x会自动识别关联的同X次轴完成联动
plot(a, b, layout = (2, 1), link=:x)
运行说明

修正后上下子图X轴可正常联动缩放、平移,下方子图会同时显示左侧对应绿色折线的主Y轴、右侧对应橙色散点的次Y轴,无元素丢失、轴错位问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:33:25