我想使用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
中获得此结果?但是,阴影不是必需的。
答案 0 :(得分: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()
然后旋转,当它们不应该
时,你会看到轮廓线消失答案 1 :(得分:0)
我认为你想设置轮廓的偏移量:
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
。