在matplotlib 3D表面上实现连续阴影

7 投票
1 回答
12445 浏览
提问于 2025-04-17 16:23

在matplotlib的3D图中,我可以通过设置行数和列数来决定表面上可见的面总数,具体的设置方法是:

s=ax.plot_surface(x,y,z, color='gray', shade=True, rstride=1,cstride=1)

这里的rstride和cstride数字越小,面就越小。因为我还在这个表面上绘制了流线或轨迹,所以我想去掉这些面的边缘。现在,使用:

s.set_linewidth(0)

并将rstride和cstride设置为较小的值,我几乎达到了我想要的效果,也就是表面上颜色几乎是连续变化的,这样看起来有很好的3D效果。

可惜的是,线条还是存在的,形成了面之间的空隙。有没有办法解决这个问题?也许我只是漏掉了一个简单的命令……

补充:生成这个表面的代码比较长,没法在这里详细列出。我附上了一个结果的快照,展示了上面提到的解决方法。带有白色线条的表面

1 个回答

11

你有没有试过在里面加上 antialiased=False 呢?

surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1)

在这里输入图片描述

surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, linewidth=0)

在这里输入图片描述

surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, linewidth=0, antialiased=False)

在这里输入图片描述

撰写回答