2014-06-26 17 views
11

Mi piacerebbe essere in grado di salvare i grafici di Matplotlib e aggiungerli direttamente come grafica vettoriale nei documenti di Microsoft Word. Tuttavia, l'unico formato supportato da Word e Matplotlib è entrambi .eps e il testo degli assi è completamente mancante in Word se provo. Ti faccio vedere:Conversione di testo in Matplotlib durante l'esportazione di file .eps

Ecco uno script minimo esempio di lavoro:

import matplotlib.pyplot as plt 
import numpy as np 

axes = plt.gca() 
data = np.random.random((2, 100)) 
axes.plot(data[0, :], data[1, :]) 

Apparentemente, il modo in cui Matplotlib salva il testo nei file .eps non è compatibile con il modo in cui Word legge il testo dai file .eps. I file .eps esportati hanno un bell'aspetto in PS_View.

Mi vengono in mente due soluzioni, ma non so come implementare loro o se è a tutto il possibile in Matplotlib:

  1. vectorise il testo in modo che sia incorporato come percorsi. Questo è supportato dal backend SVG di Matplotlib impostando rcParam 'svg.fonttype' su 'path', ma non sembra supportato direttamente dal backend di ps. Questa sarebbe la soluzione ideale. C'è un modo per fare questo?
  2. Rasterise solo il testo quando si esporta come .eps. Questa sarebbe una soluzione alternativa meno ideale. Può essere fatto?
+1

Ho appena provato a incorporare un file '.eps' nell'ultimo Microsoft Word (2016) su Mac e ora sembra che il testo sia visualizzato correttamente. – mfitzp

+0

Grazie per il test, @mfitzp! Da quando ho postato questa domanda la mia azienda è passata da Word 2010 a Word 2013. Ho deciso di riprovare, ma il problema rimane ancora qui. O il problema è stato corretto in Word 2016, o la versione Mac di Word è semplicemente migliore. Tuttavia, le mie domande sulle soluzioni alternative (domande che non sono specifiche della piattaforma) rimangono valide. –

+2

Posso confermare che non funziona su Word 2013 su Windows almeno (non posso testare il 2016 purtroppo). – mfitzp

risposta

2

Come sebacastroh sottolinea, si può risparmiare figura matplotlib come svg utilizzando plt.savefig() e quindi utilizzare Inkscape per eseguire la conversione tra svg e emf. Enhanced Meta files (emf) sono facilmente leggibili da qualsiasi programma di Office.
Questo può essere automatizzato, in questo modo

import matplotlib.pyplot as plt 
import numpy as np 
from subprocess import call 

def saveEMF(filename): 
    path_to_inkscape = "D:\Path\to\Inkscape\inkscape.exe" 
    call([path_to_inkscape, "--file", filename, "--export-emf", filename[:-4]+".emf" ]) 

axes = plt.gca() 
data = np.random.random((2, 100)) 
axes.plot(data[0, :], data[1, :]) 
plt.title("some title") 
plt.xlabel(u"some x label [µm]") 
plt.ylabel("some y label") 

fn = "data.svg" 
plt.savefig(fn) 
saveEMF(fn) 

Può anche avere senso per salvare la funzione saveEMF() esternamente in un modulo di avere sempre a portata di mano.

+0

Sebbene sia un po 'una soluzione alternativa per convertire da '.svg' a' .emf' usando Inkscape, lo script è piuttosto comodo, e posso confermare che funziona perfettamente. Grazie! –

Problemi correlati