Python Matplotlib将图形保存为数据文件

4
我想创建一个Python脚本,可以沿着水平轴缩放matplotlib图形。我的绘图是一组水平条形图。
我还希望它能够接受任何通用的matplotlib图形。
我不想只加载图像并放大它,我想沿水平轴放大图形。(我知道如何做到这一点)
有没有办法将创建的图形保存为数据文件并加载,或者有没有对象可以保存和以后加载?
(通常,我会创建我的图形,然后使用matplotlib plt.show显示它,但是图形创建需要时间,我不想每次显示它时都重新创建图形)

你想保存图表还是底层数据? - David Z
@DavidZ 底层数据,即保存图形数据的数组或其他数据结构。 - azazelspeaks
也许你可以使用pickle来保存对象,然后稍后再次加载它?https://docs.python.org/2/library/pickle.html - Cedric Zoppolo
matplotlib.pyplot.plot和其他函数返回底层数据,您可以使用pickle保存以备将来使用。 - ForceBru
2
您可以查看此问题 https://dev59.com/imw05IYBdhLWcg3wXAmF - Cedric Zoppolo
显示剩余2条评论
2个回答

5
你可以使用 pickle 包来保存你的轴,然后再重新加载回来。
将你的图形保存到一个 pickle 文件中:
import pickle
import matplotlib.pyplot as plt
ax = plt.plot([1,2,5,10])
pickle.dump(ax, open("plot.pickle", "wb"))

然后重新加载它:

import pickle
import matplotlib.pyplot as plt   
ax = pickle.load(open("plot.pickle", "rb"))
plt.show()

我正在使用fig,(graph,label_texts)=plt.subplots(2,1,gridspec_kw = {'height_ratios':[4.5, 1]})来生成我的图表。然后,我尝试pickle.dump(fig,file(file_name.split('.')[0]+'_graph.pickle'‌​,'w')),但是出现了以下错误:<class 'pickle.PicklingError'> Can't pickle <function <lambda> at 0x0CB02FB0>: it's not found as generate_graph.<lambda> 这似乎与我生成图像的方式有关。你有什么想法吗?@Cedric - azazelspeaks
尝试使用pickle.dump(fig, open("plot.pickle", "wb"))。我认为你应该使用open而不是file - Cedric Zoppolo
我得到了相同的错误。我想这是一个pickle问题,而不是打开的问题。 - azazelspeaks
你试过使用“wb”而不是“w”吗? - Cedric Zoppolo
我做了。问题是在其中包含函数的pickling事物,添加以下dill库是解决方案。 - azazelspeaks

3

@Cedric的回答。

此外,如果您在对函数进行pickle(对象序列化)时遇到pickle错误,请将“dill”库添加到您的pickle脚本中。您只需要在开头导入它,它就会自动完成其余工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接