32

matplotlib を使用して作成した図の出所を確認できるようにしたい、つまり、これらの図を作成したコードとデータのバージョンを知りたい。(来歴の詳細については、このエッセイを参照してください。)

最も簡単な方法は、コードとデータのリビジョン番号を、保存された Figure のメタデータに追加するか、Postscript ファイルなどのコメントとして追加することだと思います。

Matplotlib でこれを行う簡単な方法はありますか? 関数はこれsavefigができないようですが、誰かが実行可能な解決策を思いつきましたか?

4

4 に答える 4

19

を使用する方法はわかりませんが、次のコマンドを使用してpngにメタデータを追加matplotlibできます。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'}
于 2012-05-11T13:53:27.397 に答える
10

PDF ファイルに興味がある場合は、matplotlib モジュールをご覧くださいmatplotlib.backends.backend_pdf。このリンクには、その使用法の良い例があり、次のように「凝縮」できます。

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()
于 2013-07-04T04:55:33.007 に答える
2

SVG ファイルを生成している場合は、SVG ファイルの末尾にテキストを XML コメントとして追加するだけです。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")
于 2014-08-14T15:52:11.163 に答える