【发布时间】:2015-02-13 19:52:54
【问题描述】:
我有一个使用 matplotlib 创建绘图的程序 - 有时是线图,有时是 NonUniformImages。我希望能够腌制这些情节以在以后重新打开它们,而无需再次经历整个创建过程。无论出于何种原因,它不断抛出PicklingError: Can't pickle 'RendererAgg' object。我试过同时使用import dill as pickle 和import pickle,以及所有 4 种不同的酸洗选项,但没有变化。
坐标轴在这里定义:
class Imaging:
def function:
ax1 = plt.subplot(2,1,1)
ax2 = plt.subplot(2,1,2)
并在此处设置:(Imaging.figureProperties 是一个列表,用于保存多个[ax1,ax2] 对象。也与定义ax1 和ax2 的函数相同。)
Imaging.figureProperties.append([ax1,ax2])
最后,数据在这里被腌制(i是用户选择的,但它会在列表中):
class2:
with open(filename, 'wb') as f:
pickle.dump(Imaging.figureProperties[i-1],f)
只要我使用import dill as pickle,我从this question 运行示例代码没有问题(有一些细微的变化,例如在'wb' 而不是仅'w' 中打开)。如果我使用标准import pickle,它会抛出相同的PicklingError。这是怎么回事?
【问题讨论】:
-
什么版本的mpl?我想我们最近清理了很多这些东西。
-
@tcaswell,我使用的是 1.4.0。刚刚更新到 1.4.2。
标签: python matplotlib pickle figure dill