¿Cómo insertar una imagen pequeña en la esquina de una plot con matplotlib?

Lo que quiero es realmente simple. Tengo un pequeño archivo de imagen llamado “logo.png” que quiero mostrar en la esquina superior izquierda de mis gráficos. Pero no puedes encontrar ningún ejemplo de eso en la galería de ejemplos de matplotlib

Estoy usando django, y mi código es algo como esto

def get_bars(request) ... fig = Figure(facecolor='#F0F0F0',figsize=(4.6,4)) ... ax1 = fig.add_subplot(111,ylabel="Valeur",xlabel="Code",autoscale_on=True) ax1.bar(ind,values,width=width, color='#FFCC00',edgecolor='#B33600',linewidth=1) ... canvas = FigureCanvas(fig) response = HttpResponse(content_type='image/png') canvas.print_png(response) return response 

¿¿algunas ideas?? gracias por adelantado

Si desea que la imagen se encuentre en la esquina de su figura real (en lugar de la esquina de su eje), mire la figimage .

Tal vez algo como esto? (usando PIL para leer la imagen):

 import matplotlib.pyplot as plt import Image import numpy as np im = Image.open('/home/jofer/logo.png') height = im.size[1] # We need a float array between 0-1, rather than # a uint8 array between 0-255 im = np.array(im).astype(np.float) / 255 fig = plt.figure() plt.plot(np.arange(10), 4 * np.arange(10)) # With newer (1.0) versions of matplotlib, you can # use the "zorder" kwarg to make the image overlay # the plot, rather than hide behind it... (eg zorder=10) fig.figimage(im, 0, fig.bbox.ymax - height) # (Saving with the same dpi as the screen default to # avoid displacing the logo image) fig.savefig('/home/jofer/temp.png', dpi=80) plt.show() 

texto alternativo

Otra opción, si desea que la imagen sea una fracción fija del ancho / alto de la figura es crear un eje “ficticio” y colocar la imagen en ella con imshow . De esta manera, el tamaño y la posición de la imagen son independientes del DPI y del tamaño absoluto de la figura:

 import matplotlib.pyplot as plt from matplotlib.cbook import get_sample_data im = plt.imread(get_sample_data('grace_hopper.jpg')) fig, ax = plt.subplots() ax.plot(range(10)) # Place the image in the upper-right corner of the figure #-------------------------------------------------------- # We're specifying the position and size in _figure_ coordinates, so the image # will shrink/grow as the figure is resized. Remove "zorder=-1" to place the # image in front of the axes. newax = fig.add_axes([0.8, 0.8, 0.2, 0.2], anchor='NE', zorder=-1) newax.imshow(im) newax.axis('off') plt.show() 

introduzca la descripción de la imagen aquí