我在一个图/轴上有几个线条,条形图和艺术家。我想在原始图形/轴上添加不同的组件集。是否可以将原始图形/轴的所有对象复制到另一个图形/轴中,而无需通过代码重绘所有内容?
一种方法是在绘制另一组组件之前删除所有新添加的组件。但是,如果我想将几个轴放入一个图中,这将不起作用。已经进行了一些讨论here。 但它会逐个复制/添加所有对象,这并不比在有很多对象时重绘所有对象好。
@Greg,非常感谢回复。如果我只绘制数据,它将很简单,只需重新绘制数据,甚至复制一些行。然而,这个数字包含了很多艺术家,也可以由用户通过GUI界面添加,或者通过动态脚本添加机器人,我可能在运行时不知道它们的类型。该图是即时生成的。当然,我可以尝试复制所有数据,记录所有艺术家类型,属性并再次重新绘制它们。但它太多了,并参与修改生成这些数字的软件。也许我可以遍历所有可能的对象copy
和add_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从新数字中分离出来并使其与旧数字相结合。