matplotlib 中的曲面和 3d 轮廓

Posted

技术标签:

【中文标题】matplotlib 中的曲面和 3d 轮廓【英文标题】:Surface and 3d contour in matplotlib 【发布时间】:2016-05-28 11:47:50 【问题描述】:

我想使用matplotlib 绘制带有颜色图、线框和轮廓的曲面。像这样的:

请注意,我不是在询问与 xy 平行的平面中的轮廓,而是图像中的 3D 和白色轮廓。

如果我以天真的方式绘制所有这些东西,我将看不到轮廓(请参阅下面的代码和图片)。

import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = np.mgrid[-1:1:30j, -1:1:30j]
Z = np.sin(np.pi*X)*np.sin(np.pi*Y)
ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0.5, rstride=1, cstride=1)
ax.contour(X, Y, Z, 10, lw=3, cmap="autumn_r", linestyles="solid", offset=-1)
ax.contour(X, Y, Z, 10, lw=3, colors="k", linestyles="solid")
plt.show()

如果为表面添加透明度,那么我可以看到轮廓,但它看起来真的很混乱(见下面的代码和图片)

import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = np.mgrid[-1:1:30j, -1:1:30j]
Z = np.sin(np.pi*X)*np.sin(np.pi*Y)
ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0.5, rstride=1, cstride=1, alpha=0.5)
ax.contour(X, Y, Z, 10, lw=3, cmap="autumn_r", linestyles="solid", offset=-1)
ax.contour(X, Y, Z, 10, lw=3, colors="k", linestyles="solid")
plt.show()

问题:有没有办法在matplotlib 中获得这个结果?不过,阴影不是必需的。

【问题讨论】:

如果将轮廓的 alpha 设置为一个较小的值,它可能看起来不那么混乱。 【参考方案1】:

我想你想设置轮廓的偏移量:

ax.contour(X, Y, Z, 10, offset=-1, lw=3, colors="k", linestyles="solid", alpha=0.5)

查看此示例了解更多信息:

http://matplotlib.org/examples/mplot3d/contour3d_demo3.html

这里的文档:

http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#contour-plots

偏移量:如果指定,则在垂直于 zdir 的平面中的该位置上绘制轮廓线的投影

注意,zdir = 'z' 默认情况下,但您可以在 x 或 y 方向上投影,并相应地设置 zdir

【讨论】:

并非如此,这将在 2D 中绘制轮廓。但不是我想要的 3D。查看示例图像,它有白色轮廓。 啊,好吧,对不起,我误解了这个问题【参考方案2】:

如果你试试这个,显然这是一个错误

import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = np.mgrid[-1:1:30j, -1:1:30j]
Z = np.sin(np.pi*X)*np.sin(np.pi*Y)


ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0, rstride=1, cstride=1)
ax.contour(X, Y, Z+1, 10, lw=3, colors="k", linestyles="solid")
plt.show()

然后旋转,你会看到轮廓线在不应该消失的时候消失

【讨论】:

以上是关于matplotlib 中的曲面和 3d 轮廓的主要内容,如果未能解决你的问题,请参考以下文章

使用 matplotlib 从“列表列表”中绘制 3d 曲面

matplotlib 3d曲面图未显示[重复]

python使用matplotlib可视化3D曲面图曲面图表示一个指定的因变量y与两个自变量x和z之间的函数关系

matplotlib 3D 轮廓标签

浏览器中的 3d 曲面图

python用matpiotilb画三维曲面图