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

标签 python matplotlib drawing multiple-instances

简短的问题: 我想使用带翼的边缘结构绘制不同的形状,因此我有一个类实际上绘制任何带翼的边缘,另一个类用于定义立方体和其他形状。现在我想在同一个图形上绘制 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))

Box(3,1,3, [0,1,0], np.eye(3) 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/

相关文章:

python - 将 super 方法与派生类的类装饰器一起使用时出现 TypeError

python - 使用子进程在没有 sudo 的情况下注销

python - 编译时如何捕获更改的 .c 文件列表?

python - 在图书馆中寻找正确的方法

c# - 全屏覆盖桌面

python - 解析文本文件python并转换为pandas dataframe

python - 我正在尝试在 python 中绘制一个 5*2 图

python - wxpython + matplotlib : autoresizing a matplotlib figure

ios - CGBitmapInfo 值在 iOS 上的表现

java - 重新画一个正方形?