2011-10-19 17 views
15

Python ve Matplotlib'de, çizimi bir açılır pencere olarak görüntülemek veya grafiği bir PNG dosyası olarak kaydetmek kolaydır. Bunun yerine grafiği RGB formatındaki numpy dizisine nasıl kaydedebilirim?Matplotlib: sayı dizisine kaydetme

cevap

35

Bu, kaydedilmiş bir plot ile bir pikselden piksele kadar bir karşılaştırma yapmanız gerektiğinde, birim testleri ve benzerleri için kullanışlı bir numaradır.

Tek yön fig.canvas.tostring_rgb ve ardından numpy.fromstring onaylı dtype ile kullanmaktır. Başka yollar da var, ama kullanmaya eğilimli olan bu.

E.g.

import matplotlib.pyplot as plt 
import numpy as np 

# Make a random plot... 
fig = plt.figure() 
fig.add_subplot(111) 

# If we haven't already shown or saved the plot, then we need to 
# draw the figure first... 
fig.canvas.draw() 

# Now we can save it to a numpy array. 
data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='') 
data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,)) 
+0

Mükemmel! 12345 – Petter

+0

Bu sadece belirli arka planda destekleniyor mu? Macosx backend ('tostring_rgb') ile çalışma görünmüyor. – mirosval

+1

Agg üzerinde çalışır, kullanmadan önce matplotlib.pyplot dosyasını plt olarak içe aktarmadan önce matplotlib.use ('agg') 'öğesini ekleyin. – mirosval