【发布时间】:2018-01-05 05:45:24
【问题描述】:
我正在使用matplotlib 生成和保存 SVG 图像,并希望使它们尽可能可重现。然而,即使在设置了np.random.seed 和random.seed 之后,SVG 图像中的各种id 和xlink:href 值在我的代码运行之间仍然会发生变化。
我认为这些差异是由于matplotlib 用于渲染 SVG 图像的后端造成的。有没有办法为这个后端设置种子,以便相同的图在两次不同的代码运行之间产生相同的输出?
示例代码(运行两次,为第二次运行更改plt.savefig 中的名称):
import random
import numpy as np
import matplotlib.pyplot as plt
random.seed(42)
np.random.seed(42)
x, y = np.random.randn(4096), np.random.randn(4096)
heatmap, xedges, yedges = np.histogram2d(x, y, bins=(64,64))
fig, axis = plt.subplots()
plt.savefig("random_1.svg")
比较文件:
diff random_1.svg random_2.svg | head
35c35
< " id="md3b71b67b7" style="stroke:#000000;stroke-width:0.8;"/>
---
> " id="m7ee1b067d8" style="stroke:#000000;stroke-width:0.8;"/>
38c38
< <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#md3b71b67b7" y="307.584"/>
---
> <use style="stroke:#000000;stroke-width:0.8;" x="57.6" xlink:href="#m7ee1b067d8" y="307.584"/>
82c82
< <use style="stroke:#000000;stroke-width:0.8;" x="129.024" xlink:href="#md3b71b67b7" y="307.584"/>
【问题讨论】:
标签: python matplotlib svg random reproducible-research