我正在尝试使用trisurf绘制一个船体。我需要指定每个三角形的颜色(有很多)。这可以做到吗?我尝试了这个,但它不工作:
import matplotlib.pyplot as plt:
...
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(points[:,0], points[:,1], points[:,2],
triangles=faces, cmap=facecolors)
plt.show()
facecolors
是具有len(faces)
行的矩阵;每一行都是(R,G,B)。如果我省略cmap
参数,它会画得很好,但当然是单色的。
有可能做我想做的事吗?
2条答案
按热度按时间pxq42qpu1#
关于颜色,您需要决定
1.要将数据(
points[:,2]
)与色彩Map表结合使用以对表面进行着色,或者1.您希望自己指定颜色。
在第一种情况下,
cmap
需要是matplotlib色彩Map表而不是数组,您可以使用命名的色彩Map表,如"jet"
,或者创建自己的色彩Map表。在第二种情况下,您需要省略
cmap
关键字,而使用facecolors
关键字参数,该参数将在后台传递给Poly3DCollection
,facecolor参数当前被忽略,在代码中可以看到,尽管facecolor
参数正确地传递给了Poly3DCollection
,facecolor随后被color
参数覆盖,该参数似乎不接受numpy数组。wtlkbnrh2#
我发现了同样的问题(仍然在2023年没有修复)。我避免了它使用这个代码,希望对其他用户有用。
如果你有节点的颜色信息,而没有面的颜色信息,那么这个函数从构成面的点来估计面的颜色可能会很有用。(这个函数只计算平均值,不做渐变)