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
相关产品推荐
相关产品推荐

