存储和重新加载matplotlib.pyplot对象

hrirmatl  于 2023-06-30  发布在  其他
关注(0)|答案(5)|浏览(146)

我在一个伪操作环境中工作,我们在收到数据后制作新的图像。有时当新数据进来时,我们需要重新打开一个图像并更新该图像,以便创建合成,添加覆盖等。除了添加到图像之外,这还需要修改标题、图例等。
matplotlib中是否有内置的东西可以让我存储和重新加载matplotlib.pyplot对象以备后用?它需要保持对所有相关对象的访问,包括图形、线条、图例等。也许泡菜就是我要找的,但我怀疑。

kfgdxczn

kfgdxczn1#

从1.2版开始,matplotlib提供了实验性的pickling支持。如果您遇到任何问题,请通过mpl邮件列表或在www.example.com上打开问题让我们知道github.com/matplotlib/matplotlib
HTH

编辑:增加了一个简单的示例

import matplotlib.pyplot as plt
import numpy as np
import pickle

ax = plt.subplot(111)
x = np.linspace(0, 10)
y = np.exp(x)
plt.plot(x, y)
pickle.dump(ax, open('myplot.pickle', 'w'))

然后在单独的会话中:

import matplotlib.pyplot as plt
import pickle

ax = pickle.load(open('myplot.pickle'))
plt.show()
a2mppw5e

a2mppw5e2#

perl 森对Jupyterhub工作人员的回答的一个小修改
在加载pickle之前使用%matplotlib notebook。在jupyterhub和jupyter notebook中使用%matplotlib inline对我来说都不起作用。并给出以AttributeError结尾的回溯:“module”对象没有属性“new_figure_manager_given_figure”。

import matplotlib.pyplot as plt
import numpy as np
import pickle

%matplotlib notebook

ax = plt.subplot(111)
x = np.linspace(0, 10)
y = np.exp(x)
plt.plot(x, y)
with open('myplot.pkl','wb') as fid:
    pickle.dump(ax, fid)

然后在单独的会话中:

import matplotlib.pyplot as plt
import pickle

%matplotlib notebook

with open('myplot.pkl','rb') as fid:
    ax = pickle.load(fid)
plt.show()
j7dteeu8

j7dteeu83#

我使用matplotlib为一些论文制作了数字。我不想保存图形(如在MATLAB中),而是编写一个脚本,绘制数据,然后格式化并保存图形。在我想保留数据的本地副本的情况下(特别是如果我想再次使用它),我发现**numpy.savez()numpy.load()**非常有用。
起初,我错过了在MATLAB中保存图形的收缩 Package 的感觉,但过了一段时间,我开始喜欢这种方法,因为它包含了可用于进一步分析的格式的数据。

4dbbbstv

4dbbbstv4#

在jupyter notebook中测试。

import matplotlib.pyplot as plt
import numpy as np
import pickle

fig, axes = plt.subplots(figsize=(20, 5),nrows=1, ncols=2) 
x,y = np.arange(10), np.random.random(10)
axes[0].plot(x,y)
axes[1].plot(x,y)
plt.show()

# myfname = input("Save figure? [enter filename]: ") 
myfname = 'test'
if (myfname!=''):
    fig.savefig(f'./{myfname}.png')
    print(f'file saved to ./{myfname}.png')
    with open(f'./{myfname}.png.pkl','wb') as fid:
        pickle.dump(fig, fid)
        print(f'pickled to ./{myfname}.png.pkl') 

###################################
####### in a separate session
myfname = 'test'
with open(f'./{myfname}.png.pkl', 'rb') as fh:
    fig_loaded = pickle.load(fh)

print(fig_loaded.axes[0].lines[0].get_data()) # get data
fig_loaded # show fig
ilmyapht

ilmyapht5#

你试过泡菜模块了吗?它序列化一个对象,将其转储到一个文件,并可以在以后从该文件重新加载它。

相关问题