Ridurre le dimensioni del file PDF dei grafici filtrando gli oggetti nascosti

Mentre produci grafici a dispersione di molti punti in R (usando ggplot() per esempio), potrebbero esserci molti punti dietro gli altri e non visibili affatto. Per esempio vedi la trama qui sotto:

inserisci la descrizione dell'immagine qui

Questo è un diagramma a dispersione di diverse centinaia di migliaia di punti, ma la maggior parte di essi si trova dietro gli altri punti. Il problema è quando si esegue il cast dell’output in un file vettoriale (ad esempio un file PDF), i punti invisibili rendono le dimensioni del file così grandi e aumentano l’utilizzo della memoria e della CPU durante la visualizzazione del file.

Una soluzione semplice consiste nel trasmettere l’output a un’immagine bitmap (TIFF o PNG ad esempio), ma perdono la qualità del vettore e possono essere anche di dimensioni maggiori. Ho provato alcuni compressori PDF online, ma il risultato era della stessa dimensione del mio file originale.

C’è qualche buona soluzione? Ad esempio un modo per filtrare i punti che non sono visibili, possibilmente durante la generazione del grafico o dopo la modifica del file PDF?

Come prima cosa puoi fare qualcosa del genere:

 set.seed(42) DF <- data.frame(x=x<-runif(1e6),y=x+rnorm(1e6,sd=0.1)) plot(y~x,data=DF,pch=".",cex=4) 

inserisci la descrizione dell'immagine qui

Dimensione PDF: 6334 KB

 DF2 <- data.frame(x=round(DF$x,3),y=round(DF$y,3)) DF2 <- DF[!duplicated(DF2),] nrow(DF2) #[1] 373429 plot(y~x,data=DF2,pch=".",cex=4) 

inserisci la descrizione dell'immagine qui

Dimensione PDF: 2373 KB

Con l'arrotondamento puoi controllare quanti valori vuoi rimuovere. Hai solo bisogno di modificarlo per gestire i diversi colors.

Il semplice salvataggio della trama come file png alta risoluzione ridurrà drasticamente le dimensioni, mantenendo la qualità più che sufficiente. Almeno non ho mai avuto lamentele nei diari di nessuno dei png che ho inviato loro, ma assicurati di usare> 600 dpi.

Penso che potrebbe essere fatto con alcuni post-elaborazione del file pdf. In Linux, se dovessi ridurre un pdf, lo farei

 pdf2ps input.pdf output.ps ps2pdf output.ps output.pdf 

che per qualche ragione funziona in modo abbastanza efficiente.

Puoi vedere alcune discussioni su https://askubuntu.com/questions/113544/how-to-reduce-pdf-filesize .