2015-05-18 19 views
9

C'è un modo per utilizzare PIL con matplotlib per posizionare loghi in EPS o SVG (o qualsiasi formato vettoriale scalabile) per posizionare il logo sul grafico e generare il file finale come EPS. Ora ottengo un grafico molto elaborato perché c'è un file .png che tenta di essere convertito in formato EPS, dove l'obiettivo è salvare l'immagine come .eps o .svg.Matplotlib imshow con EPS

Penso che questa potrebbe essere una restrizione a causa del back-end, sono aperto a cambiare quale uso.

Questo è ciò che non funziona:

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

Tutti gli aggiornamenti?

+0

Hai appena provato? [I documenti] (http://matplotlib.org/1.3.1/users/image_tutorial.html#importing-image-data-into-numpy-arrays) implicano che se l'immagine passata a 'imshow' è non-png, matplotlib ricadrà sul PIL che dovrebbe essere in grado di gestire eps ([docs] (http://pillow.readthedocs.org/en/latest/handbook/image-file-formats.html#eps)). Non ho ancora file EPS da testare, ma potrei provare domani, potenzialmente. –

risposta

0

solito achive una resa migliore in questo caso con qualcosa di simile:

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, se si utilizza una versione a giocare con interpolation e origin opzioni può aiutare)

+0

Funziona con grafica vettoriale - al contrario di PNG? – Jared

+0

PIL può gestire file .eps http://pillow.readthedocs.org/en/latest/handbook/image-file-formats.html saranno rasterizzati ma è possibile controllare il numero di punti (vedere il collegamento) – GBy

+0

L'obiettivo è per la figura di salvare come un eps o qualche altra grafica vettoriale scalabile, con il logo incluso. – Jared

-1

I usare in questo modo:

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) 

ed ottengo i migliori risultati con .png uscita per il ridimensionamento. I scale i miei grafici fino a A1 e sembra fantastico. Modifica la dimensione e la dpi quando crei la figura

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

Il tuo esempio incorpora un logo jpg - OP vuole incorporare eps/svg penso. Penso che il punto sia che vogliono mantenere la grafica vettoriale dappertutto. –

+0

@JRichardSnape Questo è corretto: l'obiettivo è avere l'output in SVG/EPS. Non ho ancora risolto questo problema, ma aggiornerò se lo farò. – Jared