我在一个图/轴上有几个线条,条形图和艺术家.我想在原始图形/轴上添加不同的组件集.是否可以将原始图形/轴的所有对象复制到另一个图形/轴中,而无需通过代码重绘所有内容?
一种方法是在绘制另一组组件之前删除所有新添加的组件.但是,如果我想将几个轴放入一个图中,这将不起作用.这里已经进行了一些讨论.但它一个接一个地复制/添加所有对象,这并不比在有很多对象时重绘所有对象更好.
@Greg,非常感谢回复.如果我只绘制数据,它将很简单,只需重新绘制数据,甚至复制一些行.然而,这个数字包含了很多艺术家,也可以由用户通过GUI界面添加,或者通过动态脚本添加机器人,我可能在运行时不知道它们的类型.该图是即时生成的.当然,我可以尝试复制所有数据,记录所有艺术家类型,属性并再次重新绘制它们.但它太多了,并参与修改生成这些数字的软件.也许我可以遍历所有可能的对象做copy和add_xxx.但是,我会有一个更好的方法.
感谢@Joe Kington和他的帖子:"将轴实例添加到另一个数字".
我找到了复制轴并将轴插入子图的方法:
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()
Run Code Online (Sandbox Code Playgroud)
然而,在大多数情况下,到目前为止它似乎并不比blit好.这是为什么?因为轴的腌制实际上是整个图形的腌制.当解开它时,它将创建一个新的图形,并且加载的轴实例将与它相关联.甚至我们设法将轴添加到旧图中.ax2仍然只与新数字相关联.因此,当我们尝试与旧图形交互时,ax2将不会相互作用.相反,如果我们缩放/平移新数字,两个数字中的ax2将会改变.如果我们只保存svg或pdf文件,这似乎是一个相当不错的解决方案.
仍然试图找到一种方法将ax2从新图中解耦并使其与旧图相结合.
| 归档时间: |
|
| 查看次数: |
4167 次 |
| 最近记录: |