2012-05-10 15 views
23

मैं matplotlib का उपयोग करके बनाए गए आंकड़ों के उद्भव का पता लगाने में सक्षम होना चाहता हूं, यानी यह जानने के लिए कि मेरे कोड और डेटा के किस संस्करण ने इन आंकड़ों को बनाया है। (this essay देखें और अधिक के लिए।)matplotlib सहेजे गए आंकड़ों में मेटाडेटा जोड़ सकते हैं?

मुझे लगता है कि सबसे सरल दृष्टिकोण कोड और डेटा की संशोधित संख्याओं को सहेजे गए आंकड़ों के मेटाडेटा में जोड़ने के लिए, या उदाहरण के लिए एक पोस्टस्क्रिप्ट फ़ाइल में टिप्पणियों के रूप में जोड़ना होगा।

Matplotlib में ऐसा करने का कोई आसान तरीका है? savefig फ़ंक्शन इस में सक्षम नहीं प्रतीत होता है लेकिन क्या कोई काम करने योग्य समाधान के साथ आया है?

+1

बस यही सीधा हो सकता है साजिश ... –

+3

के लिए कुछ पाठ जोड़ने, लेकिन मैं के साथ प्रकाशन के लिए आंकड़े प्रस्तुत करना नहीं करना चाहते "5d3414b19986fe3c08df4088d87b8786a660c387" नीचे लिखा है। – ihuston

+0

फिर इसे [स्टेग्नोग्राफ़ी] (http://en.wikipedia.org/wiki/Steganography) का उपयोग करके छुपाएं। बेवकूफ सुझावों के लिए खेद है लेकिन मुझे matplotlib में इसके लिए किसी भी समर्थन के बारे में पता नहीं है। जो मैं सुझाव दे रहा हूं वह स्थिति (0,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'} 
+0

मैं इस उत्तर को समय के लिए स्वीकार करने जा रहा हूं, यह देखते हुए कि मेटलोट्लिब में मेटाडेटा को अज्ञात तरीके से प्रारूप में जोड़ने का कोई तरीका नहीं है। – ihuston

8

आप पीडीएफ फाइलों में रुचि रखते हैं, तो आप एक हो सकता है 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

आप SVG फ़ाइलें पैदा कर रहे हैं, तो आप बस पाठ एसवीजी के अंत में एक XML टिप्पणी के रूप में जोड़ सकते हैं फ़ाइल। इंकस्केप जैसे संपादक इस पाठ को संरक्षित करते हैं, भले ही आप बाद में एक छवि संपादित करें।

यहाँ एक उदाहरण है, झुका से उत्तर के आधार पर:

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") 
संबंधित मुद्दे