同一图上的多个对象(MATPLOTLIB)

时间:2013-10-02 09:49:29

标签: python matplotlib drawing multiple-instances

简短问题: 我想用翅膀的egde strucutre绘制不同的形状,所以我有一个类实际绘制任何有翼的翅膀,另一个用于定义立方体和其他形状。现在我想在同一个图上绘制2个立方体,但我不能和每个图中总是得到一个立方体。

长期问题: 我想用翅膀的egde结构绘制不同的形状,所以我有:

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))

Box(3,1,3, [0,1,0], np.eye(3) Box(3,1,3, [1,0,3], np.eye(3)

1 个答案:

答案 0 :(得分:2)

不要为每个“结构”定义新轴:

    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传递给您的多维数据集类。