首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一幅图中的堆栈热图

一幅图中的堆栈热图
EN

Stack Overflow用户
提问于 2022-10-27 17:01:45
回答 2查看 63关注 0票数 0

在Julia中,我想在一个图中叠加热图,这就是如何在这个堆栈溢出帖子中使用Matlab完成的:I need a function to display matrices stacked最好对所有热图都有相同的颜色条,并且能够指定每个平面的位置(即沿第三维空间)。

我知道如何通过在每个曲面上添加一个偏移量来叠加曲面图(请参阅此页面:https://plotly.com/julia/3d-surface-plots/),但这并不是我想要实现的,因为曲面图不是平面的,但是顾名思义,它是一个曲面。我目前的解决办法是使用一个足够大的偏移量,使每个表面看起来都是平坦的,但由于第三轴与我测量的真实世界高度有关,我对这个修正不满意。

我想要的是一个参数positions_z = [z1, z2, z3, ...],它指定了沿第三轴的所有热图的位置,但我也对解决方法感到满意。有人知道解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-28 18:55:13

下面是如何在Makie.jl中做到这一点:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2022-11-02 14:27:32

下面是使用PlotlyJS.jl的解决方案。平面是曲面,因此可以将热图绘制为曲面:

代码语言:javascript
复制
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文件,您应该使用以下设置来保存:

代码语言:javascript
复制
savefig(fig, "parallelheatmaps.png", width=400, height=400, scale=1)

但是为了发布,您可能需要一个带有dpi=300的pdf文件。在这种情况下,除以下情况外:

代码语言:javascript
复制
savefig(fig, "parallelheatmaps.pdf", width=300*3, height=300*3, scale=1)

其中3是宽度和高度(以英寸为单位)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74225736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档