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

如何在Julia的Makie中填充3D曲线与X轴间的区域?

在Makie中为3D伪瀑布图添加填充区域

问题说明

我正在用Julia的Makie包制作3D伪瀑布图,已经在3D轴里画出了多条沿Y轴偏移的光谱,但现在需要给每条光谱和X轴之间的区域填充颜色。目前的代码实现了瀑布图的线条部分,但缺少填充效果。

在2D绘图里我会用fill_between!(ax,x,y,0),但不确定这个方法能不能用在3D绘图里。我使用的版本是Julia v1.9.4、Makie v0.21.3和CairoMakie v0.12.7。

解决方案

Makie的3D绘图中没有直接对应fill_between!的函数,但可以通过构造闭合的3D多边形来实现填充效果。具体思路是:为每条光谱创建一组包含光谱顶点和底部(z=0)顶点的闭合点集,再用poly!函数绘制填充区域。

完整代码

using CairoMakie

# 示例数据
spectra = [sin.(1:0.1:10) for _ in 1:10]
x_values = 1:0.1:10

# 创建画布
fig = Figure()

# 3D坐标轴
ax = Axis3(fig[1, 1], title="瀑布图", xlabel="X轴", ylabel="Y轴", zlabel="Z轴")

# 绘制数据与填充区域
for (i, spectrum) in enumerate(spectra)
    y_shift = i  # Y轴偏移量
    # 光谱的3D点
    upper_points = Point3.(x_values, y_shift, spectrum)
    # 底部(z=0)的3D点,反向排列以闭合多边形
    lower_points = reverse(Point3.(x_values, y_shift, zero(spectrum)))
    # 合并上下点形成闭合多边形的顶点
    fill_points = vcat(upper_points, lower_points)
    
    lines!(ax, upper_points, linewidth=2, color=:black)  # 绘制光谱线条
    poly!(ax, fill_points, color=(:blue, 0.3), transparency=true)  # 填充区域,设置透明度
end

# 显示图形
fig

关键说明

  • 每个填充区域的点都位于同一个y=y_shift的平面内,poly!可以正确识别并填充这个平面内的闭合多边形。
  • 设置transparency=true并调整颜色透明度(如(:blue, 0.3)),可以避免填充区域遮挡后方的光谱,提升可视化效果。
  • 可以根据需求修改填充颜色,比如使用渐变色彩区分不同的光谱,或者匹配线条颜色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:50:04