我是Python上构建3D绘图的新手。我正在研究一个代码,其中根据不同部分的值为我提供了一艘船的数据。我已经成功地将数据排列成一种形式,其中给出了船的完整 3D 图。这是我的代码部分,它给出了 3D 图。
fig = plt.figure()
ax = plt.axes(projection="3d")
X = np.array(new_list)
Y= np.array(YQ)
Z = np.array(ZQ)
ax.plot_surface(Y, Z, X, rstride=1, cstride=1,cmap='Purples', edgecolor='none')
ax.set_xlim(-80, 80)
ax.set_ylim(-80, 80)
ax.set_xlabel('Y')
ax.set_ylabel('Z')
ax.set_zlabel('X')
plt.show()
请忽略我将不同的变量分配给轴的常规排序。我知道这让它有点混乱,但数据是以这样的方式排列的,我不得不使用它。现在我想为浸没在水中的船部分分配不同的颜色。在我的代码中,变量 Z 表示船的高度,所以基本上我想为所有小于 Z = 0 的值分配不同的颜色,因为 Z 小于 0 的所有值都浸没在水中。我可以在代码中进行哪些更改来执行此任务?
我的想法是为ax.plot_surface()
的facecolors
输入变量生成一个np.array
。 举个例子看这个。
因此,由于您希望 z 值低于 0 的所有内容都采用不同的颜色,因此您可以通过以下方式创建您的面部颜色:
color_above_0 = [1, 1, 1]
color_below_0 = [0, 0, 0]
f_c = np.array([[color_below_0 if val < 0 else color_above_0 for val in z_row] for z_row in Z])
然后,您可以按照上一个链接中的说明将其用作 facecolor 输入。