我试图绘制一个表面和一条穿过它的线。我想绘制一个图,其中隐藏在表面后面的线的一部分。
我在matplotlib中尝试过此操作,但表面后面的线的部分也可见。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
x = np.arange(0,10,1)
y = np.arange(0,10,1)
z = np.arange(0,10,1)
X, Y = np.meshgrid(x,y)
Z= np.ones((len(x),len(x)))*5
fig = plt.figure()
ax1 = fig.gca(projection='3d')
ax1.plot_surface(X, Y, Z, color='red', edgecolor='black')
ax1.plot(x,y,z,'-',color='black',linewidth=4)
plt.show()
答案 0 :(得分:1)
在matplotlib中,有一个zorder
的概念。根据{{3}},zorder
较高的对象被绘制在zorder
较低的对象之上。默认情况下,色块的zorder
比线条高,这就是为什么您的红色表面似乎会遮挡线条的原因。在这里,通过选择分别位于z <= 5
或z >= 5
的索引,为该行的背景和前景部分创建了一组新的坐标。然后,我分别绘制这两组点,为所有三个点-曲面和两条线都设置zorder
。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
x = np.arange(0, 10, 1)
y = np.arange(0, 10, 1)
z = np.arange(0, 10, 1)
x_background = x[z <= 5]
y_background = y[z <= 5]
z_background = z[z <= 5]
x_foreground = x[z >= 5]
y_foreground = y[z >= 5]
z_foreground = z[z >= 5]
X, Y = np.meshgrid(x, y)
Z = np.ones((len(x), len(x))) * 5
fig = plt.figure()
ax1 = fig.gca(projection='3d')
ax1.plot_surface(X, Y, Z, color='red', edgecolor='black', zorder=1)
ax1.plot(
z_background, z_background, z_background, '-', color='black', linewidth=4,
zorder=2)
ax1.plot(
z_foreground, z_foreground, z_foreground, '-', color='black', linewidth=4,
zorder=3)
plt.show()
希望这会有所帮助!