2009-07-22 14 views
5

Ho un istogramma con diverse centinaia di elementi, per cui eseguo un grafico Q-Q. Ciò comporta EPS di dimensioni pari a 2,5 megabyte. Questo è troppo per una cifra che verrà inclusa in una pubblicazione e che non verrà visualizzata con ingrandimento 100x.Ridurre la dimensione dei grafici in formato EPS

Esiste qualche opzione in R per produrre in qualche modo un EPS più piccolo? Ho cercato i documenti inutilmente. O è la mia migliore opzione per, diciamo, rasterizzare in seguito a 300 dpi? Se questo è il caso, qualche suggerimento per lo strumento per questo lavoro?

Il codice R per la trama è niente di speciale:

postscript(filename) 
qqnorm(n, main=title)) 
qqline(n) 
dev.off() 

EDIT: Doh! La mia domanda ha menzionato l'emissione di EPS e quindi la conversione in un formato raster. Quando, naturalmente, potevo semplicemente generare PNG da R.

risposta

3

I' Ho appena provato diverse cose che non hanno funzionato - le sto includendo qui per salvare gli altri perdendo il loro tempo. Per riferimento, ho impostato n <- rnorm(1e5) nel tuo codice qui sopra.

cose che non funzionano:

  1. Impostazione colormodel <- "gray".

  2. Utilizzo di un valore diverso di pch. (Alcuni altri valori aumentano la dimensione del file, ma non ne ho trovato nessuno che lo diminuisca.)

  3. Impostazione useKerning = FALSE.

  4. Modifica delle impostazioni di larghezza e altezza.

  5. Utilizzo di pdf anziché postScript.

  6. Utilizzo di CarioPS dal pacchetto Cairo.

Alla luce di ciò, penso che è improbabile che sia possibile ridurre le dimensioni del file utilizzando un formato vettoriale. Ciò significa che dovrai utilizzare un formato raster (molto probabilmente PNG).

1

Bene, l'EPS contiene solo le istruzioni per disegnare la trama, quindi la sua dimensione dipenderebbe molto da quanti punti di dati avete. È probabilmente più piccolo in un PDF in cui viene utilizzata la compressione, ma la soluzione migliore potrebbe essere probabilmente quella di utilizzare un formato raster, che può essere più piccolo di quello.

Sospetto che l'EPS R generato sia già piccolo come può ottenere (sono sicuro che hanno una propria funzione in Postscript per gestire il tracciamento dei dati con un nome di un carattere, ecc. pratica). Dubito che ci siano molti modi per ottimizzarlo. Potrei sbagliarmi, però, ma è probabile che R sia l'unico programma che ha abbastanza informazioni di alto livello per comprimere ragionevolmente l'output.

+0

I risultati PDF in un file di 1 mb, ancora troppo grande. Immagino di poter applicare il campionamento del set di dati per ridurre il numero di punti, ma è difficile non perdere alcuni punti interessanti. –

3

Hai tre opzioni.

  1. accettare la dimensione del file di grandi dimensioni
  2. Salvare il file in un formato non vettoriale come PNG
  3. Creare il QQPlot su un campione casuale di dati. Un campione casuale di poche centinaia di punti dovrebbe fornire un QQplot simile.

    PostScript (nome del file) Samp < - campione (n, size = 200) qqnorm (Samp, principale = titolo)) qqline (Samp) dev.off()

2

In questa discussione nell'elenco R link text ho ricevuto informazioni su pdftk. Con n= 1e5 è stata ridotta la dimensione del pdf da 6mb a 600k. Piuttosto pulito!

2

in GS view, convertire i nostri file in pdf, quindi convertire nuovamente in PS o EPS, la dimensione del file finale è ridotta di 5-7 volte.

+0

potresti fornire una riga di codice bash per fare questo? – toxicate20

1

L'OP ha risolto il problema generando direttamente un file PNG. Ho dovuto usare EPS perché PNG e altri formati hanno alterato l'immagine. Dovrei comunque convertire in EPS per includere in un file LaTeX.

Ho utilizzato GIMP per importare il file eps da 10 MB generato dalla funzione immagine R. Quindi ruotato, appiattito e salvato come file eps 300KB. L'appiattimento unisce tutti i livelli in un singolo livello e rimuove il canale alfa per la trasparenza. Gestito facilmente da LaTeX dopo questa trasformazione.

Prima della trasformazione, l'immagine è stata resa molto lentamente in Ghost Script e non è stato possibile eseguire il rendering in epsviewer. GIMP utilizza Ghost Script come front-end, quindi l'importazione è lenta, ma, una volta importata, tutta l'elaborazione e il rendering sono stati molto veloci.

Problemi correlati