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

求助:在Julia中实现多Heatmap沿Z轴堆叠显示的方法

Julia实现指定Z轴位置的堆叠Heatmap(共用色条)

直接通过将surface的Z值固定为目标位置,就能绘制严格的平面heatmap,而非依赖大偏移的近似方案。以下提供两种主流绘图库的实现方式:

方案一:用Makie.jl(交互性更强)

using GLMakie

# 准备数据与指定Z轴位置
x = 1:10
y = 1:10
z_positions = [2, 5, 8]  # 每个heatmap的Z轴位置
heatmap_data = [rand(10,10) for _ in z_positions]

# 统一色条范围,确保所有heatmap共用同一标尺
vmin = minimum(minimum.(heatmap_data))
vmax = maximum(maximum.(heatmap_data))

# 创建3D画布与轴
fig = Figure()
ax = Axis3(fig[1,1], xlabel="X", ylabel="Y", zlabel="Z", viewmode=:fit)

# 循环绘制每个平面heatmap
for (z, mat) in zip(z_positions, heatmap_data)
    # 生成全为目标Z值的矩阵,确保是严格平面
    z_plane = fill(z, size(mat))
    surface!(ax, x, y, z_plane, color=mat, colormap=:viridis, colorrange=(vmin, vmax))
end

# 添加共用色条
Colorbar(fig[1,2], limits=(vmin, vmax), colormap=:viridis, label="数值")

fig

方案二:用Plots.jl(代码更简洁)

using Plots
gr()

# 准备数据与指定Z轴位置
x = 1:10
y = 1:10
z_positions = [2, 5, 8]
heatmap_data = [rand(10,10) for _ in z_positions]

# 统一色条范围
vmin = minimum(minimum.(heatmap_data))
vmax = maximum(maximum.(heatmap_data))

# 初始化3D图
plt = plot(legend=false, xlabel="X", ylabel="Y", zlabel="Z")

# 循环绘制平面heatmap
for (z, mat) in zip(z_positions, heatmap_data)
    z_plane = fill(z, size(mat))
    surface!(plt, x, y, z_plane, color=mat, c=:viridis, clims=(vmin, vmax))
end

# 启用共用色条
plot!(plt, colorbar=true, colorbar_title="数值")
display(plt)

核心说明

  • 两种方案均通过fill(z, size(mat))生成固定Z值的矩阵,绘制出严格贴合指定Z轴位置的平面heatmap,完全匹配实际测量高度需求。
  • 通过统一colorrange(Makie)或clims(Plots)参数,确保所有heatmap共用同一色条标尺,数据对比更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:45:22