我希望能够确定我使用matplotlib创建的数字的出处,即知道我的代码和数据的哪个版本创建了这些数字。 (有关出处的更多信息,请参阅this essay。)
我想最简单的方法是将代码和数据的修订号添加到已保存数字的元数据中,或者作为postscript文件中的注释添加。例如。
在Matplotlib中有没有简单的方法可以做到这一点? savefig
函数似乎不具备此功能,但有人提出了可行的解决方案吗?
答案 0 :(得分:15)
我不知道使用matplotlib
的方式,但你可以add metadata to png's with PIL
:
f = "test.png"
METADATA = {"version":"1.0", "OP":"ihuston"}
# Create a sample image
import pylab as plt
import numpy as np
X = np.random.random((50,50))
plt.imshow(X)
plt.savefig(f)
# Use PIL to save some image metadata
from PIL import Image
from PIL import PngImagePlugin
im = Image.open(f)
meta = PngImagePlugin.PngInfo()
for x in METADATA:
meta.add_text(x, METADATA[x])
im.save(f, "png", pnginfo=meta)
im2 = Image.open(f)
print im2.info
这给出了:
{'version': '1.0', 'OP': 'ihuston'}
答案 1 :(得分:10)
如果您对PDF文件感兴趣,那么您可以查看matplotlib模块matplotlib.backends.backend_pdf
。在this link有一个很好的使用示例,可以“压缩”到以下内容中:
import pylab as pl
import numpy as np
from matplotlib.backends.backend_pdf import PdfPages
pdffig = PdfPages('figure.pdf')
x=np.arange(10)
pl.plot(x)
pl.savefig(pdffig, format="pdf")
metadata = pdffig.infodict()
metadata['Title'] = 'Example'
metadata['Author'] = 'Pluto'
metadata['Subject'] = 'How to add metadata to a PDF file within matplotlib'
metadata['Keywords'] = 'PdfPages example'
pdffig.close()
答案 2 :(得分:3)
如果要生成SVG文件,只需将文本作为XML注释附加到SVG文件的末尾即可。像Inkscape这样的编辑器似乎会保留此文本,即使您随后编辑了图像。
以下是一个例子,基于Hooked的回答:
import pylab as plt
import numpy as np
f = "figure.svg"
X = np.random.random((50,50))
plt.imshow(X)
plt.savefig(f)
open(f, 'a').write("<!-- Here is some invisible metadata. -->\n")
答案 3 :(得分:0)
从matplotlib version 2.1.0开始,savefig命令接受关键字参数metadata
。您传入带有要保存的字符串键/值对的字典。
这仅与某些'agg'
后端的PNG文件完全兼容。
对于PDF和PS文件,您可以使用
的预定义列表