简短的问题: 我想使用带翼的边缘结构绘制不同的形状,因此我有一个类实际上绘制任何带翼的边缘,另一个类用于定义立方体和其他形状。现在我想在同一个图形上绘制 2 个立方体,但我做不到,而且我总是在每个图形中绘制一个立方体。
长问题: 我想使用带翼的egde structre绘制不同的形状,所以我有:
class WEdge -> wedge_instance = WEdge(vertices, faces)
然后我为每个需要绘制的形状创建一个类,例如:
class Box -> simplebox = Box(vertices, faces, translation, rotation)
在 WEdge 类中,我实际上使用以下代码绘制对象:
ax = a3.Axes3D(pl.figure())
for k in range(self.nFaces):
currentColumn = self.faces[k,:]
vtx = np.zeros([4,3])
j = 0
for i in currentColumn:
vtx[j] = self.vertices[i-1]
j = j +1
tri = a3.art3d.Poly3DCollection([vtx])
tri.set_color(colors.rgb2hex(sp.rand(3)))
tri.set_edgecolor('b')
ax.add_collection3d(tri)
问题是当我想在同一个图中绘制两个立方体时。我尝试了 Hold、gca 等多种可能的组合,但最终我总是得到图 1 中的一个立方体和图 2 中的另一个立方体。
示例:
>>>Box(3,1,3, [0,1,0], np.eye(3))
>>> # hold, gca, timer...
>>>Box(3,1,3, [1,0,3], np.eye(3))
最佳答案
不要为每个“结构”定义新的轴:
ax = a3.Axes3D(pl.figure())
将 ax
传递到 WEdge
类中,以便它们都可以在同一轴上绘制:
def init(self, ..., ax=None):
self.ax = ax if ax else a3.Axes3D(pl.figure())
we1 = WEdge()
we2 = WEdge(ax=we1.ax)
或者也许更加平等,
ax = a3.Axes3D(pl.figure())
we1 = WEdge(ax)
we2 = WEdge(ax)
您可能还需要将 ax
传递给您的多维数据集类。
关于python - 同一绘图上的多个对象 (MATPLOTLIB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19134175/