2015-05-18 4 views
9

Gibt es eine Möglichkeit, PIL mit matplotlib zu verwenden, um Logos in EPS oder SVG (oder einem skalierbaren Vektorformat) zu platzieren, um das Logo auf dem Diagramm zu platzieren und die endgültige Datei als EPS auszugeben. Jetzt bekomme ich eine schrecklich gerenderte Grafik, weil es eine .png Datei gibt, die versucht, in das EPS-Format konvertiert zu werden, wo das Ziel darin besteht, das Bild als .eps oder .svg zu speichern.Matplotlib imshow mit EPS

Ich denke, das kann eine Einschränkung aufgrund der Backend sein, ich bin offen für die Änderung, die ich benutze.

Dies ist, was nicht funktioniert:

ax1.set_axis_bgcolor('#fafafa') 

img = image.imread('./static/images/logo.png') 
image_axis = fig.add_axes(ax1.get_position()) 
image_axis.patch.set_visible(False) 
image_axis.yaxis.set_visible(False) 
image_axis.xaxis.set_visible(False) 
image_axis.set_xlim(0,19.995) 
image_axis.set_ylim(0,11.25) 

image_axis.imshow(img, extent=(11.79705,18.99525,.238125,1.313625), zorder=-1, alpha=0.15) #need to keep a 5.023 x by y ratio (.4 x .079) 

fig.savefig('static/images/graphs/'+filename+'.eps', format='eps', bbox_inches='tight') 

keine Updates?

+0

Haben Sie es gerade versucht? [Die Dokumente] (http://matplotlib.org/1.3.1/users/image_tutorial.html#importing-image-data-into-numpy-arrays) implizieren, dass, wenn das an "imshow" übergebene Bild nicht-png ist, Matplotlib wird auf PIL zurückgreifen, das mit eps umgehen kann ([docs] (http://pillow.readthedocs.org/en/latest/handbook/image-file-formats.html#eps)). Ich habe keine EPS-Dateien zur Hand, aber könnte morgen versuchen, möglicherweise. –

Antwort

0

I achive in der Regel eine bessere Darstellung in diesem Fall mit so etwas wie:

from PIL import Image 

logo = Image.open('icons\logo.png') 
# TODO define bbox as a matplotlib.transforms.Bbox 
image_axis.imshow(logo, clip_box=bbox, aspect='equal', 
    origin='lower', interpolation='nearest') 

(Matplotlib 1.4.2, wenn Sie eine alte Version benutzen spielen mit interpolation und origin Optionen helfen können)

+0

Funktioniert das mit Vektorgrafiken - im Gegensatz zu PNGs? – Jared

+0

PIL kann .eps Dateien behandeln http://pillow.readthedocs.org/en/latest/handbook/image-file-formats.html Sie werden gerastert, aber Sie können die Anzahl der Punkte steuern (siehe den Link) – GBy

+0

Das Ziel ist für die Figur, um als eine eps oder eine andere skalierbare Vektorgrafik zu speichern, mit dem Logo enthalten. – Jared

-1

I verwenden sie es wie folgt aus:

self.img=mpimg.imread('images/Logo.jpg') 
logo=self.fig.figimage(self.img, xo=260, yo=2600,zorder=100) 
# 
self.fig.savefig('myplot.png',dpi=300) 

und ich die besten Ergebnisse mit .png Ausgang für die Skalierung. Ich skaliere meine Plots bis A1 und es sieht gut aus. Ändern Sie die Größe und dpi bei der Erstellung der Abbildung

plt.figure(1,figsize=(size_x,size_y), dpi=98) 
+1

Ihr Beispiel enthält ein Jpg-Logo - OP möchte eps/svg einbetten, denke ich. Ich denke, der Punkt ist, dass sie durchgängig in Vektorgrafiken bleiben wollen. –

+0

@JRichardSnape Das ist richtig - das Ziel ist es, die Ausgabe in SVG/EPS zu haben. Ich habe das immer noch nicht gelöst, werde es aber aktualisieren. – Jared