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

Julia使用Plots绘制多图时vline/hline不显示的解决方法

问题修复方案

不需要切换Plotly后端,Plots的默认GR后端就可以正常渲染垂直/水平线,你的代码不显示线条完全是逻辑和变量错误导致的。

原代码核心问题

  • 变量名混乱:初始化的空数组为plot_array,后续存入绘图对象、循环遍历却使用了未定义的variogram_array,plot_array全程为空,循环根本不会执行加线逻辑。
  • 渲染顺序错误:在循环里先调用display()输出了未添加线条的基础组合图,之后才执行plot!()加线,修改后的图表没有被再次渲染。
  • 子图指向错误:多子图布局下直接调用plot!()默认只会修改最后一个激活的子图,不会自动按循环索引匹配对应子图,也没有传入subplot参数指定要修改的子图序号。

修复后可运行代码

推荐先给每个单图加完对应线条,再组合成最终图表,逻辑更清晰:

using Plots

plot_array = Any[]
v_array = [1, 3]
h_array = [9, 10]

# 处理第一张图:生成基础曲线+加对应横竖线
p1 = plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
vline!(p1, [v_array[1]], label="vline_1", line=(:dot, 7))
hline!(p1, [h_array[1]], label="hline_1", line=(:dot, 7))
push!(plot_array, p1)

# 处理第二张图:生成基础曲线+加对应横竖线
p2 = plot([1, 2, 3, 4, 5], [1, 16, 10, 15, 23])
vline!(p2, [v_array[2]], label="vline_2", line=(:dot, 7))
hline!(p2, [h_array[2]], label="hline_2", line=(:dot, 7))
push!(plot_array, p2)

# 所有子图处理完成后统一组合显示
final_plot = plot(plot_array..., size=(1000, 1000))
display(final_plot)

如果要先生成组合布局再补加线条,必须在加线时指定subplot参数告知要修改的子图序号:

using Plots

v_array = [1, 3]
h_array = [9, 10]

# 先生成基础组合图
p1 = plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
p2 = plot([1, 2, 3, 4, 5], [1, 16, 10, 15, 23])
final_plot = plot(p1, p2, size=(1000, 1000))

# 循环给对应序号的子图加线,必须传subplot参数
for i in 1:2
    vline!(final_plot, [v_array[i]], label="vline_$i", line=(:dot,7), subplot=i)
    hline!(final_plot, [h_array[i]], label="hline_$i", line=(:dot,7), subplot=i)
end

display(final_plot)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:57:06