我正试图使用Python的Matplotlib库绘制一些对象。这些对象由使用plt.scatter()
实现的点和使用Poly3DCollection
实现的补丁组成。我希望补丁具有轻微透明度,以便可以看到补丁后面的点和边缘。
这是我已经生成的代码和绘图。似乎我已经接近成功,只是缺少透明度的功能。有没有人能为我提供建议?
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = [0, 2, 1, 1]
y = [0, 0, 1, 0]
z = [0, 0, 0, 1]
vertices = [[0, 1, 2], [0, 1, 3], [0, 2, 3], [1, 2, 3]]
tupleList = list(zip(x, y, z))
poly3d = [[tupleList[vertices[ix][iy]] for iy in range(len(vertices[0]))] for ix in range(len(vertices))]
ax.scatter(x,y,z)
ax.add_collection3d(Poly3DCollection(poly3d, facecolors='w', linewidths=1, alpha=0.5))
plt.show()
Line3DCollection
的补丁必须是封闭的(不像Poly3DCollection
那样)。在这个例子中并不重要,但通常我们应该以第一个顶点的重复结束,即vertices = [[0, 1, 2], [0, 1, 3], [0, 2, 3], [1, 2, 3], [0, 1, 2]]
。 - Chilichillerx
、y
和z
是对vertices
的索引。这有点令人困惑,因为它们都恰好是小正整数。Poly3DCollection
的参数是[[v1, v2, v3], [v2, v3, v4], [v3, v4, v5]]
,其中v1
是一个包含x、y、z位置值的元组。 - Cuadue