如何在Julia中提取并复用/组合子图?
在Julia中提取并复用Plots子图的方法
当你已经生成包含多子图的Plots对象(比如示例中的pp和gg),直接用plot(pp[1], gg[2], layout=(1,2))无法将提取的Subplot对象组合成新图——因为Plots.jl不支持直接把Subplot实例作为plot函数的输入参数。
示例场景代码:
using Plots gr() pp = plot(0:0.01:2, [sin.(0:0.01:2), cos.(0:0.01:2)], layout=(1,2)); gg = plot(0:0.01:2, [sin.(0:0.01:2).^2, cos.(0:0.01:2).^2], layout=(1,2)); # 此方式无法生效 mixed = plot(pp[1], gg[2], layout=(1,2))
通用解决方案
要实现子图的复用与组合,需要提取原Subplot中的绘图系列(series),再将其添加到新的绘图布局中:
# 创建空的新图,指定目标布局 mixed = plot(layout=(1,2)) # 将pp[1]的所有绘图系列添加到新图的第1个子图 plot!(mixed[1], pp[1].series_list...) # 将gg[2]的所有绘图系列添加到新图的第2个子图 plot!(mixed[2], gg[2].series_list...)
核心逻辑是访问Subplot对象的series_list属性——它包含了该子图内所有曲线的数据集、样式等信息,通过plot!将这些系列逐一添加到新图的对应位置,即可完整复用原Subplot的内容。
针对ControlSystems.jl波特图的优化方案
对于bodeplot的场景,除了上述通用方法,你还可以通过参数直接生成单一类型的子图:
- 仅生成幅频图:
bodeplot(sys, plotphase=false) - 仅生成相频图:
bodeplot(sys, plotmag=false)
通过这种方式,你可以直接得到独立的幅频或相频图,再用plot(p_mag, p_phase, layout=(1,2))轻松组合,无需从已有的复合图中提取子图。
内容的提问来源于stack exchange,提问作者ITA
相关产品推荐
相关产品推荐

