Matplotlib figura a imagen como una matriz numpy

Estoy tratando de obtener una imagen de matriz numpy de una figura de Matplotlib y actualmente lo estoy haciendo guardando en un archivo, luego leyendo el archivo de nuevo, pero creo que tiene que haber una mejor manera. Esto es lo que estoy haciendo ahora:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas from matplotlib.figure import Figure fig = Figure() canvas = FigureCanvas(fig) ax = fig.gca() ax.text(0.0,0.0,"Test", fontsize=45) ax.axis('off') canvas.print_figure("output.png") image = plt.imread("output.png") 

Intenté esto:

 image = np.fromstring( canvas.tostring_rgb(), dtype='uint8' ) 

De un ejemplo que encontré, pero me da un error que dice que el objeto ‘FigureCanvasAgg’ no tiene ningún atributo ‘renderizador’.

Para obtener el contenido de la figura como valores de píxel RGB, matplotlib.backend_bases.Renderer debe dibujar primero el contenido del canvas. Puedes hacer esto manualmente llamando a canvas.draw() :

 from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas from matplotlib.figure import Figure fig = Figure() canvas = FigureCanvas(fig) ax = fig.gca() ax.text(0.0,0.0,"Test", fontsize=45) ax.axis('off') canvas.draw() # draw the canvas, cache the renderer image = np.fromstring(canvas.tostring_rgb(), dtype='uint8') 

Consulte aquí para obtener más información sobre la API matplotlib.

de los documentos:

https://matplotlib.org/gallery/user_interfaces/canvasagg.html#sphx-glr-gallery-user-interfaces-canvasagg-py

 fig = Figure(figsize=(5, 4), dpi=100) # A canvas must be manually attached to the figure (pyplot would automatically # do it). This is done by instantiating the canvas with the figure as # argument. canvas = FigureCanvasAgg(fig) # your plotting here canvas.draw() s, (width, height) = canvas.print_to_buffer() # Option 2a: Convert to a NumPy array. X = np.fromstring(s, np.uint8).reshape((height, width, 4))