使用 Python,我正在尝试编写将当前输出与预期输出进行比较的测试。输出是一个 matplotlib 图,我想在不将该图保存到文件的情况下执行此操作。我想找到对象的加密散列,这样我只需要将一个散列与另一个散列进行比较,以确认整个对象与预期的没有变化。这适用于 numpy 数组,如下所示:import numpy as npimport hashlibnp.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 supporting the buffer API requiredimport hashlibimport numpy as npimport matplotlib.pyplot as pltX = 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 对象的加密哈希的任何想法?
1 回答
慕斯王
TA贡献1864条经验 获得超2个赞
您可以使用buffer_rgba()
. 在使用它之前,您必须实际绘制图形:
必须至少调用一次 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()
添加回答
举报
0/150
提交
取消