2010-08-31 13 views
15

Was ich will ist wirklich einfach. Ich habe eine kleine Bilddatei namens "logo.png", die ich in der oberen linken Ecke meiner Diagramme anzeigen möchte. Aber man kann nicht jedes Beispiel, dass in den Beispielen Galerie von matplotlib findenWie füge ich ein kleines Bild an der Ecke eines Plots mit Matplotlib ein?

Im mit django, und mein Code ist so etwas wie dieses

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 

irgendwelche Ideen ?? thxs im voraus

Antwort

25

Wenn Sie das Bild an der Ecke Ihrer tatsächlichen Abbildung (anstatt der Ecke Ihrer Achse) wollen, schauen Sie in figimage.

Vielleicht so etwas? (Unter Verwendung von PIL das Bild zu lesen):

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... (e.g. 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() 

alt text

Eine weitere Option, wenn Sie das Bild ein fester Bruchteil der Breite/Höhe Wert sein haben möchten ist ein „Dummy“ erstellen Achsen und legen Sie das Bild in es mit imshow. Auf diese Weise die Größe des Bildes und die Position ist unabhängig von DPI und die absolute Größe der Figur:

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() 

enter image description here

+0

es funktionierte ... thxs viel! – pleasedontbelong

+0

Gibt es eine Möglichkeit, dieses Logo relativ rechts unten zu positionieren? – Jared

+0

@Jared - Versuchen Sie etwas wie folgt: 'fig.figimage (im, fig.bbox.xmax - Breite, Höhe)' –

Verwandte Themen