如何在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
相关产品推荐
相关产品推荐

