使用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 supporting the buffer API required
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对象的加密散列吗?
谢谢。
发布于 2020-08-24 06:56:26
您可以使用buffer_rgba()获取数字为numpy数组。在使用它之前,您必须实际绘制如下数字:
在此函数工作之前,必须至少调用
绘图一次,并更新呈现器,以便对图形进行后续更改。
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()https://stackoverflow.com/questions/63553072
复制相似问题