在Julia中,我想在一个图中叠加热图,这就是如何在这个堆栈溢出帖子中使用Matlab完成的:I need a function to display matrices stacked最好对所有热图都有相同的颜色条,并且能够指定每个平面的位置(即沿第三维空间)。
我知道如何通过在每个曲面上添加一个偏移量来叠加曲面图(请参阅此页面:https://plotly.com/julia/3d-surface-plots/),但这并不是我想要实现的,因为曲面图不是平面的,但是顾名思义,它是一个曲面。我目前的解决办法是使用一个足够大的偏移量,使每个表面看起来都是平坦的,但由于第三轴与我测量的真实世界高度有关,我对这个修正不满意。
我想要的是一个参数positions_z = [z1, z2, z3, ...],它指定了沿第三轴的所有热图的位置,但我也对解决方法感到满意。有人知道解决办法吗?
发布于 2022-10-28 18:55:13
下面是如何在Makie.jl中做到这一点:
using GLMakie
xs = range(-1, 1, length=10)
heights = 1:5
data = reshape(heights, 1, 1, :) .* (xs .^2 .+ xs' .^2);
fig = Figure()
ax = Axis3(fig[1, 1], aspect=(1, 1, 1), elevation=π/16)
cr = (minimum(data), maximum(data)) # color range to use for all heatmaps
for i in 1:size(data, 3)
hm = heatmap!(ax, xs, xs, data[:, :, i], colorrange=cr)
translate!(hm, 0, 0, heights[i])
i == 1 && Colorbar(fig[1, 2], hm) # add the colorbar once
end
zlims!(ax, minimum(heights), maximum(heights))
fig

发布于 2022-11-02 14:27:32
下面是使用PlotlyJS.jl的解决方案。平面是曲面,因此可以将热图绘制为曲面:
using PlotlyJS
f(x,y,z) = cos(x)+cos(y)+cos(z)
n=200
xl = range(-2,2, length=n)
yl = range(-2,2, length=n)
y = yl .* ones(n)'
x = ones(n) * xl'
h = -2:1
fig = Plot()
for hp in h
z= hp*ones(size(x))
surfcolor = f.(x,y,z)
addtraces!(fig, surface(x=x, y=y, z=z, coloraxis="coloraxis", surfacecolor=surfcolor));
end
relayout!(fig, font_family="Open Sherif", font_size=11, width=400, height=400,
margin=attr(t=10, r=10, b=10, l=4),
coloraxis=attr(colorscale=colors.viridis,
colorbar_len=0.65,
colorbar_thickness=24),
scene_camera_eye=attr(x=1.8, y=1.8, z=1))
display(fig)

要将图形保存为png文件,您应该使用以下设置来保存:
savefig(fig, "parallelheatmaps.png", width=400, height=400, scale=1)但是为了发布,您可能需要一个带有dpi=300的pdf文件。在这种情况下,除以下情况外:
savefig(fig, "parallelheatmaps.pdf", width=300*3, height=300*3, scale=1)其中3是宽度和高度(以英寸为单位)。
https://stackoverflow.com/questions/74225736
复制相似问题