如何通过matplotlib去除plot_wireframe中的隐藏线?

2 投票
1 回答
2706 浏览
提问于 2025-04-18 14:54

在 Python 2.x 中,matplotlib 支持隐藏线的去除吗?

我该如何自己实现这个功能?

这是另一个帖子中进一步的问题,之前在这里解决过: 如何通过 Python 获取 3D 彩色表面?

1 个回答

4

我猜你说的“隐藏”是指在视图中被表面遮挡的线条,比如在图表中的“山丘”后面。

使用 plot_surface 而不是 plot_wireframe

plot_surface vs plot_wireframe

我用

plot_wireframe(X, Y, Z, rstride=10, cstride=10)

来创建第一个图,

plot_surface(X, Y, Z, rstride=10, cstride=10, color="white", shade=False, edgecolor="blue")

来创建第二个图。

如果你想把这个和边缘的颜色映射结合起来,你需要用到一些内部的东西。如果你使用 cmap 参数给表面上色,Poly3DCollection.do_3d_projection 的源代码最终会调用 to_rgba(self._A) 来计算面颜色。把这个重新映射到边缘颜色上,你就可以了:

surf = ax.plot_surface(X, Y, Z, rstride=2, cstride=2, shade=False, cmap="jet", linewidth=1)
surf.set_edgecolors(surf.to_rgba(surf._A))
surf.set_facecolors("white")

会生成这个图:

Final plot

(你可能需要在第一次渲染后再次调用 set_edgecolorsset_facecolors,因为 do_3d_projection 可能会覆盖这些值;我是在交互模式下运行的,还没有检查过。)

撰写回答