2D线未与3D图上的表面清晰显示

时间:2019-08-13 08:15:53

标签: python matplotlib

我正在尝试使用Axes3D在matplotlib中绘制1D线和2D曲面:

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


x = np.arange(-1., 1.1, 0.1)
y = x.copy()
X, Y = np.meshgrid(x, y)
Z = np.abs(X) + np.abs(Y)

plt.close('all')
fig = plt.figure()
ax = fig.gca(projection='3d')

ax.plot(np.zeros_like(y), y, 1, color='k')
ax.plot(x, np.zeros_like(x), 1, color='k')

surf = ax.plot_surface(X, Y, Z, color='w')

plt.show(block=False)

但是2D图以某种方式隐藏了线条:

enter image description here

如果我注释surf = plot_surface(...)代码行,则1D行正确显示: If I comment the <code>surf =</code> code line

如何使线条与表面正确显示?

2 个答案:

答案 0 :(得分:1)

Axes3D.plot_surface()显然接受了透明(alpha)参数,该参数实际上被转发给基类Poly3DCollection。

当然,行plot()的调用接受一个linewidth参数。

因此,如果用较粗的线渲染线图,并以一定的透明度渲染曲面,则应该能够找到设置的组合,使您可以平衡地看到线条和曲面。

https://matplotlib.org/tutorials/toolkits/mplot3d.html#mpl_toolkits.mplot3d.Axes3D.plot_surface

https://matplotlib.org/api/_as_gen/mpl_toolkits.mplot3d.art3d.Poly3DCollection.html#mpl_toolkits.mplot3d.art3d.Poly3DCollection

答案 1 :(得分:1)

您还可以通过使用zorderplot_surface命令中的plot来使线条位于曲面的顶部来实现此目的。例如

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

x = np.arange(-1., 1.1, 0.1)
y = x.copy()
X, Y = np.meshgrid(x, y)
Z = np.abs(X) + np.abs(Y)

plt.close('all')
fig = plt.figure()
ax = fig.gca(projection='3d')

surf = ax.plot_surface(X, Y, Z, color='w', zorder=1)

ax.plot(np.zeros_like(y), y, 1, color='k', zorder=10)
ax.plot(x, np.zeros_like(x), 1, color='k', zorder=11)


plt.show(block=False)

enter image description here