Makie.jl绘制三维f(x,y,z)热力图的相关操作问题咨询
问题1:调整相机位置
LScene类型的scene属性就是你需要的Scene对象,直接传入即可调用update_camera!,也可以直接修改LScene的相机参数属性,写法更简洁:
# 方法1:调用update_camera! update_camera!(ax.scene, eyeposition = Vec3f(15, 15, 8), # 相机所在位置 lookat = Vec3f(L/2, L/2, L/2), # 相机对准的中心点 upvector = Vec3f(0, 0, 1) # 向上方向轴 ) # 方法2:直接修改LScene属性 ax.eyeposition[] = (12, 12, 6) ax.lookat[] = (L/2, L/2, L/2) ax.zoom[] = 1.2 # 调整缩放比例
问题2:调整坐标轴标签、刻度属性
直接修改LScene的坐标轴相关属性即可:
# 设置坐标轴标签 ax.xlabel = "X维度" ax.ylabel = "Y维度" ax.zlabel = "Z维度" # 设置标签字体大小 ax.xlabelsize = 16 ax.ylabelsize = 16 ax.zlabelsize = 16 # 设置刻度范围和取值 ax.xticks = range(1, L, step=2) ax.yticks = range(1, L, step=2) ax.zticks = range(1, L, step=2) # 设置刻度标签大小 ax.xticklabelsize = 12 ax.yticklabelsize = 12 ax.zticklabelsize = 12 # 如需隐藏坐标轴可设置 ax.show_axis = false
问题3:添加颜色条
你原代码直接手动拼接RGBA颜色,无法关联Makie的颜色映射系统,需要先修改绘图逻辑,直接将F值传给color参数,使用内置的颜色映射,之后就可以快速添加颜色条:
using ColorSchemes # 优化绘图逻辑,避免循环逐块设置颜色 fig = Figure(resolution = (1200, 900)) ax = LScene(fig[1,1]) # 批量绘制所有立方体,绑定F值作为颜色输入 plt = mesh!.(Ref(ax), [HyperRectangle(Vec3f0(p...), Vec3f0(0.8)) for p in positions], color = F, colormap = :blues, # 可替换为其他配色方案,如:viridis、:thermal等 alpha = 0.5 ) # 批量添加线框 wireframe!.(Ref(ax), [HyperRectangle(Vec3f0(p...), Vec3f0(0.8)) for p in positions], linewidth = 0.1, overdraw = false ) # 添加颜色条,绑定绘图对象 Colorbar(fig[1,2], plt, label = "f(x,y,z)取值", labelsize = 14, ticklabelsize = 12 )
问题4:保存绘图结果
直接调用Makie内置的save函数即可,支持PNG、SVG、PDF等多种格式:
# 保存为PNG格式,可指定分辨率 save("3d_heatmap.png", fig, resolution = (1200, 900)) # 保存为矢量图格式 save("3d_heatmap.svg", fig) save("3d_heatmap.pdf", fig)
内容的提问来源于stack exchange,提问作者yosuga
相关产品推荐
相关产品推荐

