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

如何将已生成的Makie.jl Figure对象作为子图合并到另一Figure中

在Makie.jl中合并已有Figure为子图的可行方法

Makie.jl不支持直接将完整的Figure对象嵌套到另一个Figure中(因为Figure是顶级绘图容器),但可以通过迁移已有Figure中的轴(Axes)及绘图元素到新Figure的布局里,实现合并效果,无需重构原有复杂绘图函数。

实现思路

  1. 从待合并的Figure中提取内部的轴或其他绘图元素;
  2. 在目标Figure中创建GridLayout用于布局子图;
  3. 修改提取出的轴的parent属性,将其挂载到目标布局的指定位置。

完整代码示例

using Makie

# 原有生成Figure的自定义函数(无需修改)
function make_some_figure()
    # 实际为复杂自定义绘图,此处以heatmap占位
    fig, axs, plt = heatmap(rand(100,100)) 
    return fig
end

# 创建总Figure和布局容器
myfig = Figure()
subplot_grid = myfig[1, 1:2] = GridLayout()

# 生成两个待合并的子Figure
subfigA = make_some_figure()
subfigB = make_some_figure()

# 提取子Figure中的轴(若有多个轴,需遍历subfig.content筛选Axes类型)
axA = only(subfigA.content)
axB = only(subfigB.content)

# 将轴迁移到总Figure的布局中,指定位置
axA.parent = subplot_grid[1, 1]
axB.parent = subplot_grid[1, 2]

# 显示总Figure
myfig

关键说明

  • Figure是Makie的顶级容器,不能作为子元素嵌套,必须操作其内部的Axis、Colorbar等组件;
  • 若原Figure包含多个轴或附加元素(如颜色条、图例),需遍历subfig.content,筛选出所有需要迁移的元素(可通过isa(element, Axis)判断),逐个修改parent属性;
  • 迁移后原subfigA、subfigB会变为空容器,若需保留原Figure,可在迁移前复制元素(复杂绘图建议直接迁移,复制可能引发状态关联问题)。

复杂场景适配

如果原绘图包含Colorbar等依赖于原Figure的元素,需同时迁移并重新布局:

# 示例:迁移带颜色条的Figure
function make_fig_with_colorbar()
    fig, ax, plt = heatmap(rand(100,100))
    Colorbar(fig[1,2], plt)
    return fig
end

subfigC = make_fig_with_colorbar()
# 提取轴和颜色条
elements = filter(e -> isa(e, Union{Axis, Colorbar}), subfigC.content)
# 分配到总布局
subplot_grid2 = myfig[2,1:2] = GridLayout()
elements[1].parent = subplot_grid2[1,1]
elements[2].parent = subplot_grid2[1,2]

内容的提问来源于stack exchange,提问作者Jonathan F.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:20:15