matplotlib重复轴还是数字?

时间:2015-01-04 08:44:41

标签: matplotlib

我在一个图/轴上有几个线条,条形图和艺术家。我想在原始图形/轴上添加不同的组件集。是否可以将原始图形/轴的所有对象复制到另一个图形/轴中,而无需通过代码重绘所有内容?

一种方法是在绘制另一组组件之前删除所有新添加的组件。但是,如果我想将几个轴放入一个图中,这将不起作用。已经进行了一些讨论here但它会逐个复制/添加所有对象,这并不比在有很多对象时重绘所有对象好。

@Greg,非常感谢回复。如果我只绘制数据,它将很简单,只需重新绘制数据,甚至复制一些行。然而,这个数字包含了很多艺术家,也可以由用户通过GUI界面添加,或者通过动态脚本添加机器人,我可能在运行时不知道它们的类型。该图是即时生成的。当然,我可以尝试复制所有数据,记录所有艺术家类型,属性并再次重新绘制它们。但它太多了,并参与修改生成这些数字的软件。也许我可以遍历所有可能的对象copyadd_xxx。但是,我会有一个更好的方法。

感谢@Joe Kington和他的帖子:"add an axes instance to another figure"

我找到了复制轴并将轴插入子图的方法:

def test_pickleAxes():
    import pickle
    import numpy as npy
    x = npy.arange(0,4*npy.pi,0.2)
    y = npy.sin(x)

    fig, ax = plt.subplots()


    p = pickle.dumps(ax)
    ax2 = pickle.loads(p)

    ax.change_geometry(2,1,1)
    ax2.change_geometry(2,1,2)
    fig._axstack.add(fig._make_key(ax2), ax2)
    plt.show()

然而,在大多数情况下,到目前为止它似乎并不比blit好。这是为什么?因为轴的腌制实际上是整个图形的腌制。当解开它时,它将创建一个新的图形,并且加载的轴实例将与它相关联。甚至我们设法将轴添加到旧图中。 ax2仍然只与新数字相关联。因此,当我们尝试与旧图形交互时,ax2将不会相互作用。相反,如果我们缩放/平移新数字,两个数字中的ax2将会改变。如果我们只保存svg或pdf文件,这似乎是一个很好的解决方案。

仍然试图找到一种方法将ax2从新数字中分离出来并使其与旧数字相结合。

0 个答案:

没有答案