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 曲面