gpt4 book ai didi

python - Pickling Matplotlib 绘图引发 PicklingError : Can't pickle 'RendererAgg' object

转载 作者:行者123 更新时间:2023-11-30 23:14:56 26 4
gpt4 key购买 nike

我有一个使用 matplotlib 创建绘图的程序 - 有时是线图,有时是 NonUniformImages。我希望能够对这些图进行 pickle ,以便稍后重新打开它们,而无需再次经历整个创建过程。无论出于何种原因,它都会抛出 PicklingError: Can't pickle 'RendererAgg' object。我尝试过使用 import dill as pickleimport pickle,以及所有 4 种不同的 pickle 选项,但没有任何变化。

轴在这里定义:

class Imaging:
def function:
ax1 = plt.subplot(2,1,1)
ax2 = plt.subplot(2,1,2)

并在此处设置:(Imaging.figureProperties 是一个列表,旨在保存多个 [ax1,ax2] 对象。也与 ax1ax2 已定义。)

Imaging.figureProperties.append([ax1,ax2])

最后,数据在这里进行 pickle (i 由用户选择,但它将在列表中):

class2:
with open(filename, 'wb') as f:
pickle.dump(Imaging.figureProperties[i-1],f)

我运行 this question 中的示例代码没有问题(有一些细微的变化,例如在 'wb' 中打开,而不仅仅是 'w'),只要我使用 import dill as pickle 。如果我使用标准的import pickle,它会抛出相同的PicklingError。这是怎么回事?

最佳答案

我是 dill 作者。如果您编辑问题以提供可以测试的代码,我可以更好地测试您的代码。我认为您上面的代码可能有拼写错误 - 它应该是 def function(self):。还有什么是class2:?我将直接切入主题并序列化您要序列化的内容。您发布的代码实际上没有意义。

>>> import matplotlib.pyplot as plt
>>>
>>> class Imaging:
... def function(self):
... ax1 = plt.subplot(2,1,1)
... ax2 = plt.subplot(2,1,2)
...
>>> Imaging.figureProperties = []
>>>
>>> import dill
>>>
>>> ax1 = plt.subplot(2,1,1)
>>> ax2 = plt.subplot(2,1,2)
>>> Imaging.figureProperties.append([ax1, ax2])
>>> fp = dill.loads(dill.dumps(Imaging.figureProperties[0]))
>>> fp
[<matplotlib.axes._subplots.AxesSubplot object at 0x113085320>, <matplotlib.axes._subplots.AxesSubplot object at 0x113471eb8>]

您正在使用的类在使用时毫无意义,但是您要求序列化的代码确实会序列化。

关于python - Pickling Matplotlib 绘图引发 PicklingError : Can't pickle 'RendererAgg' object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28507669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com