我正在尝试使用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图以某种方式隐藏了线条:
如果我注释surf = plot_surface(...)
代码行,则1D行正确显示:
如何使线条与表面正确显示?
答案 0 :(得分:1)
Axes3D.plot_surface()
显然接受了透明(alpha
)参数,该参数实际上被转发给基类Poly3DCollection。
当然,行plot()
的调用接受一个linewidth
参数。
因此,如果用较粗的线渲染线图,并以一定的透明度渲染曲面,则应该能够找到设置的组合,使您可以平衡地看到线条和曲面。
https://matplotlib.org/tutorials/toolkits/mplot3d.html#mpl_toolkits.mplot3d.Axes3D.plot_surface
答案 1 :(得分:1)
您还可以通过使用zorder
和plot_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)