求助:在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
相关产品推荐
相关产品推荐

