Python 在matplotlib对象上使用hashlib

Python 在matplotlib对象上使用hashlib,python,matplotlib,hash,cryptography,hashlib,Python,Matplotlib,Hash,Cryptography,Hashlib,使用Python,我试图编写测试来比较当前输出和预期输出。输出是matplotlib图形,我希望在不将图形保存到文件的情况下执行此操作 我的想法是找到对象的加密散列,这样我就只需要将一个散列与另一个散列进行比较,以确认整个对象与预期的一样 这适用于numpy阵列,如下所示: import numpy as np import hashlib np.random.seed(1) A = np.random.rand(10,100) actual_hash = hashlib.sha1(A).hex

使用Python,我试图编写测试来比较当前输出和预期输出。输出是matplotlib图形,我希望在不将图形保存到文件的情况下执行此操作

我的想法是找到对象的加密散列,这样我就只需要将一个散列与另一个散列进行比较,以确认整个对象与预期的一样

这适用于numpy阵列,如下所示:

import numpy as np
import hashlib
np.random.seed(1)
A = np.random.rand(10,100)
actual_hash = hashlib.sha1(A).hexdigest()
expected_hash = '38f682cab1f0bfefb84cdd6b112b7d10cde6147f'
assert actual_hash == expected_hash
在matplotlib对象上尝试此操作时,我得到:
TypeError:object支持所需的缓冲区API

import hashlib
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0,100,1000)
Y = np.sin(0.5*X)
plt.plot(X,Y)
fig = plt.gcf()
actual_hash = hashlib.sha1(fig).hexdigest() #this raises the TypeError
知道如何使用hashlib查找matplotlib对象的加密哈希吗


谢谢。

您可以使用以numpy数组形式获取图形。在使用之前,您必须实际绘制图形:

必须至少调用一次draw,此函数才能正常工作,并且 为图形的任何后续更改更新渲染器


工作完美。谢谢
import hashlib
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0,100,1000)
Y = np.sin(0.5*X)
plt.plot(X,Y)
canvas = plt.gcf().canvas
canvas.draw()

actual_hash = hashlib.sha1(np.array(canvas.buffer_rgba())).hexdigest()