2011-10-19 15 views

Odpowiedz

35

To przydatna sztuczka do testów jednostkowych i tym podobnych, gdy trzeba wykonać porównanie pikseli z piksem z zapisaną fabułą.

Jednym ze sposobów jest użycie fig.canvas.tostring_rgb, a następnie numpy.fromstring z odpowiednim typem dtype. Są też inne sposoby, ale to ten, z którego korzystam.

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

Świetnie! 12345 – Petter

+0

Czy jest to obsługiwane tylko w niektórych backendach? Wygląda na to, że nie działa z 'backendem' macosx' ('tostring_rgb'), który nie został znaleziony. – mirosval

+1

Działa na Agg, dodaj 'matplotlib.use ('agg')' before 'import matplotlib.pyplot as plt', aby go użyć. – mirosval