venerdì 28 dicembre 2018

Salvare i grafici di R in un file

Una rappresentazione grafica dei dati è importante non solo visualizzarla, ma anche salvarla sotto forma di file per archiviarla o inserirla in una pubblicazione, in un post o in un sito web.

Tecnicamente vi sono due modi per salvare un'immagine sotto forma di file:
→ salvarla in formato raster (detto anche bitmap);
→ salvarla in formato vettoriale.

Un'immagine in formato raster/bitmap è costituita da una matrice di punti (pixel) opportunamente colorati. Quando viene ingrandita la qualità dell'immagine peggiora. In compenso è possibile agire sui pixel modificando luminosità, contrasto, saturazione dei colori dell'immagine. Il formato raster/bitmap è tipico della fotografia.

Un'immagine in formato vettoriale è invece costruita con una tecnica che consente, mediante trasformazioni matematiche (vettori, onde il nome, e matrici), di ingrandirla senza perdita della qualità.

In questo esempio nel quale i caratteri tipografici sono stati ingranditi di circa sei volte è evidente la perdita di qualità del formato raster/bitmap (a sinistra) rispetto al formato vettoriale (a destra):


Nel primo script viene salvato sotto forma di file nei tre formati grafici raster/bitmap più comuni e cioè
.bmp (Windows bitmap)
.jpeg (Joint Photographic Experts Group)
.png (Portable Network Graphics)
questo grafico a scatola con i baffi (boxplot) che illustra la distribuzione della concentrazione nel sangue degli eritrociti (globuli rossi) rcc per sport praticato ricavata dal set di dati ais [1]:


Prima di eseguire lo script è necessario creare (se non l'avete ancora fatto) sul vostro PC o notebook la cartella C:\Rdati\ nella quale verranno salvati i tre file, denominati rispettivamente boxplot.bmp, boxplot.jpg e boxplot.pngI dati sono contenuti nella tabella ais del pacchetto DAAG - accertatevi di avere installato il pacchetto o in alternativa procedete come indicato in [1].

Copiate per intero lo script riportato qui sotto quindi incollatelo nella Console di R e premete ↵ Invio:

# SALVA I GRAFICI SU DISCO SOTTO FORMA DI FILE come immagini in formato raster (bitmap)
#
library(DAAG) # carica il pacchetto DAAG che include il set di dati ais
#
# salva l'immagine in formato .bmp (Windows bitmap)
#
bmp("C:/Rdati/boxplot.bmp", units = "px", width = 1000, height = 1000, pointsize = 24, bg = "white") # predispone nome e formato del file
boxplot(rcc~sport, horizontal=FALSE, boxwex = 0.4, cex.axis = 0.8, las = 2, data=ais, main="Eritrociti per sport praticato", xlab="Sport praticato", ylab="Eritrociti in 10^12/L", notch=FALSE, col="yellow") # traccia boxplot
dev.off() # salva il file
#
# salva l'immagine in formato .jpeg (Joint Photographic Experts Group)
#
jpeg("C:/Rdati/boxplot.jpg", units = "px", width = 1000, height = 1000, pointsize = 24, bg = "white") # predispone nome e formato del file
boxplot(rcc~sport, horizontal=FALSE, boxwex = 0.4, cex.axis = 0.8, las = 2, data=ais, main="Eritrociti per sport praticato", xlab="Sport praticato", ylab="Eritrociti in 10^12/L", notch=FALSE, col="yellow") # traccia boxplot
dev.off() # salva il file
#
# salva l'immagine in formato .png (Portable Network Graphics)
#
png("C:/Rdati/boxplot.png", units = "px", width = 1000, height = 1000, pointsize = 24, bg = "white") # predispone nome e formato del file
boxplot(rcc~sport, horizontal=FALSE, boxwex = 0.4, cex.axis = 0.8, las = 2, data=ais, main="Eritrociti per sport praticato", xlab="Sport praticato", ylab="Eritrociti in 10^12/L", notch=FALSE, col="yellow") # traccia boxplot
dev.off() # salva il file
#

Gli argomenti width=1000 e height=1000 specificano larghezza e altezza dell'immagine in pixel. Questa unità di misura può essere cambiata con l'argomento units che qui è posto uguale a "px" ma che può essere espresso in alternativa come "in" (pollici), "cm" (centimetri) o "mm" (millimetri).

L'argomento pointsize = 24 specifica la dimensione dei caratteri, mentre l'argomento bg = "white" specifica il colore dello sfondo.

Da notare che nella rappresentazione del grafico a scatola con i baffi nella funzione boxplot() compaiono come argomenti:
→ l'argomento boxwex = 0.4 che gestisce la larghezza dei boxplot;
→ l'argomento cex.axis = 0.8 che gestisce la dimensione dei caratteri;
→ l'argomento las = 2 che ruota verticalmente le etichette.

In questo secondo script lo stesso grafico viene salvato nei formati vettoriali
.pdf (Portable Document Format)
.ps (Postscript)
nella cartella C:\Rdati\ nei file denominati rispettivamente boxplot.pdf e boxplot.ps.

Copiate per intero lo script riportato qui sotto quindi incollatelo nella Console di R e premete ↵ Invio:

# SALVA I GRAFICI SU DISCO SOTTO FORMA DI FILE come immagini in formato vettoriale
#
library(DAAG) # carica il pacchetto DAAG che include il set di dati ais
#
# salva l'immagine in formato .pdf (Portable Document Format)
#
pdf("C:/Rdati/boxplot.pdf", width = 7, height = 7) # predispone nome e formato del file
boxplot(rcc~sport, horizontal=FALSE, boxwex = 0.4, cex.axis = 0.8, las = 2, data=ais, main="Eritrociti per sport praticato", xlab="Sport praticato", ylab="Eritrociti in 10^12/L", notch=FALSE, col="yellow") # traccia boxplot
dev.off() # salva il file
#
# salva l'immagine in formato .ps (postscript)
#
postscript("C:/Rdati/boxplot.ps", width = 7, height = 7) # predispone nome e formato del file
boxplot(rcc~sport, horizontal=FALSE, boxwex = 0.4, cex.axis = 0.8, las = 2, data=ais, main="Eritrociti per sport praticato", xlab="Sport praticato", ylab="Eritrociti in 10^12/L", notch=FALSE, col="yellow") # traccia boxplot
dev.off() # salva il file
#

Da notare che i formati .pdf e .ps in quanto formati vettoriali prevedono che le dimensioni dell'immagine (width = 7, height = 7) siano espresse in pollici (non avrebbe senso esprimerle in pixel). Inoltre quando estraete dal file .ps il file boxplot.pdf il file preesistente con lo stesso nome generato dalla funzione pdf() verrà sovrascritto.

In entrambi gli script la funzione dev(off) salva il file e chiude il dispositivo (virtuale) che ha generato la stampa, e a questo punto il dispositivo al quale sono inviati i grafici torna ad essere la finestra che viene aperta con la funzione windows() sul monitor/schermo del PC o notebook.


----------

[1] Vedere il post Il set di dati ais nel quale trovate anche come caricare i dati della tabella senza impiegare il pacchetto DAAG

Nessun commento:

Posta un commento