lunedì 20 dicembre 2021

Grafici 3D


(l'animazione del grafico 3D è stata realizzata con l'ultimo script riportato in questo post,
per riavviarla riaprire la pagina web dal browser)

Con R è possibile realizzare grafici tridimensionali (grafici 3D) impiegando una sola riga di codice.

Per vedere come sia possibile farlo è necessario:
scaricare i quattro pacchetti aggiuntivi scatterplot3d, plot3D, rgl e Rcmdr [1];
installare il pacchetto DAAG che contiene nella tabella ais i dati impiegati come esempio [2].

Le tre variabili x, y, z utilizzate nelle rappresentazioni grafiche che seguono sono rispettivamente la concentrazione nel sangue degli eritrociti (rcc), espressa in milioni per microlitro di sangue (106/µL), la concentrazione nel sangue dell'emoglobina (hg), espressa in grammi per decilitro di sangue (g/dL) e il valore ematòcrito (hc), cioè la quota di sangue occupata dalla parte corpuscolata, espresso in percentuale (%) [3].

Ho riportato per i quattro pacchetti altrettanti script, limitati all'essenziale, che hanno il solo scopo di interessare a R per questo tipo di rappresentazione. Per i dettagli si rimanda ai manuali di riferimento dei pacchetti, che contengono la documentazione completa delle funzioni e dei rispettivi argomenti [4]. Ho poi aggiunto un quinto script che realizza un grafico 3D animato (quello riportato in apertura del post) per consentire di valutare anche questo aspetto di R.

Negli script le prime due righe di codice servono per caricare con library(DAAG) il pacchetto che contiene i dati (prima riga) e, di volta in volta, caricare il pacchetto di grafica (seconda riga) necessario per lo specifico grafico 3D. Questo viene infine realizzato con la funzione impiegata nell'ultima riga di codice (nel caso del grafico 3D animato nelle ultime due).

Poiché le variabili da rappresentare (rcc, hg, hc) sono contenute nella tabella ais (del pacchetto DAAG) il nome completo e univoco delle variabili è rappresentato dal prefisso ais più ($) il nome della variabile, pertanto in tre script trovate le variabili indicate come ais$rcc, ais$hg, ais$c.

In altri due script è stata invece impiegata la funzione attach() che, una volta specificato come argomento il nome della tabella che contiene le variabili con attach(ais), consente di impiegare i nomi originari delle variabili (quindi i nomi senza il prefisso ais$), che pertanto trovate riportati come rcc, hg, hc

Copiate e incollate nella Console di R il primo script e premete ↵ Invio:

# GRAFICO 3D SEMPLICE impiega il pacchetto scatterplot3d
#  
library(DAAG) # carica il pacchetto che include il set di dati/tabella ais 
library(scatterplot3d) # carica il pacchetto per la rappresentazione grafica 3D
#  
# grafico 3D semplice 
#  
scatterplot3d(ais$rcc, y=ais$hg, z=ais$hc, color="red", type="p", main="Grafico 3d semplice", xlab="Eritrociti", ylab="Emoglobina", zlab="Ematòcrito")  
#  

Dopo avere caricato i due pacchetti necessari, il primo contenente i dati e il secondo contenente le funzioni grafiche, il grafico viene realizzato con la funzione scatterplot3d() specificando come argoment:
→ le variabili della tabella ais da rappresentare (ais$rcc, ais$hg, ais$hc);
→ il tipo (type="p") di rappresentazione dei dati ("p" = punti, ma sono possibili le alternative "h" = punti con linee verticali che congiungono ciascun punto al piano x-y, e "l" = linee che congiungono i punti tra loro);
→ il colore dei punti (color="red");
→ il titolo del grafico (main="Grafico 3d semplice") e le etichette degli assi. 

Questo è il grafico risultante:


Prima di eseguire ognuno dei successivi script uscite da R e poi rientrate (procedura raccomandata), oppure in alternativa chiudete la finestra contenente il grafico, quindi digitate nella
Console di R

rm(list=ls(all=TRUE))

per effettuare la pulizia dell'area di lavoro [5].

Ora copiate e incollate nella Console di R questo secondo script e premete ↵ Invio:

# GRAFICO 3D CON VISTA DA ANGOLI VARIABILI impiega il pacchetto plot3D
#  
library(DAAG) # carica il pacchetto che include il set di dati/tabella ais 
library(plot3D) # carica il pacchetto per la rappresentazione grafica 3D
#  
# grafico 3D con vista da angoli variabili
#  
scatter3D(ais$rcc, y=ais$hg, z=ais$hc, theta=20, phi=0, ticktype="detailed", xlab="Eritrociti", ylab="Emoglobina", zlab="Ematòcrito")  

Dopo avere caricato i due pacchetti necessari il grafico viene realizzo con la funzione scatter3D() specificando come argoment:
→ le variabili della tabella ais da rappresentare (ais$rcc, ais$hg, ais$hc);
→ l'angolo di rotazione del sistema di coordinate sull'asse verticale (theta=20);
→ l'angolo di rotazione del sistema di coordinate sull'asse orizzontale (phi=0);
→ la presenza sugli assi delle scale numeriche (ticktype="detailed");
→ le etichette degli assi.

I punti sono riportati con una scala di colori che indica la loro distanza dal piano x-y, misurata lungo l'asse z. La scala colore/distanza è riportata nella legenda che compare sulla destra del grafico.  Questo è il grafico:


Copiate e incollate nella Console di R il terzo script e premete ↵ Invio:

# GRAFICO 3D INTERATTIVO CHE PUO' ESSERE RUOTATO CON IL MOUSE impiega il pacchetto rgl
#  
library(DAAG) # carica il pacchetto che include il set di dati/tabella ais 
library(rgl) # carica il pacchetto per la rappresentazione grafica 3D
#
attach(ais) # consente di impiegare direttamente i nomi delle variabili
#  
# grafico 3D che può essere ruotato con il mouse
#  
plot3d(rcc, y=hg, z=hc, type="p", col="red", size=3) 
#  
detach(ais) # termina l'impiego diretto dei nomi delle variabili 
#

Dopo avere caricato i due pacchetti necessari, la funzione attach(ais) consente questa volta di realizzare il grafico nella riga successiva impiegando direttamente i nomi delle variabili contenute nella tabella ais senza specificare per ciascuna di esse la tabella nella quale sono incluse (notare quindi la differenza con i due script precedenti).

Il grafico è realizzato con la funzione plot3d() specificando come argomenti:
→ le variabili della tabella ais da rappresentare (rcc, hg, hc);
→ type="p" che consente di rappresentare i dati come punti;
→ col="red" che specifica il colore dei punti;
→ size=3 che specifica la dimensione dei punti [6].

La funzione detach() tecnicamente, come riporta la documentazione "Detach a database, i.e., remove it from the search() path of available R objects. Usually this is either a data.frame which has been attached or a package which was attached by library", praticamente ripristina le condizioni precedenti al comando attach().

Notare anche che, in questo e nei due script successivi, non essendo stati specificati gli argomenti xlab, ylab e zlabR riporta automaticamente come etichette degli assi i nomi delle variabili.
 
Questa volta il grafico 3D è interattivo. Infatti se “afferrate” il grafico risultante facendo click su di esso e tenendo premuto il tasto sinistro del mouse senza rilasciarlo, potete ruotare il grafico a vostro piacimento muovendo il mouse. In questo modo sono state realizzate le due immagini che, qui mostrate affiancate, forniscono due delle possibili viste [della distribuzione] dei dati. 


Copiate e incollate nella Console di R questo quarto script e premete ↵ Invio:

# GRAFICO 3D INTERATTIVO CHE PUO' ESSERE RUOTATO CON IL MOUSE impiega il pacchetto Rcmdr
#  
library(DAAG) # carica il pacchetto che include il set di dati/tabella ais 
library(Rcmdr) # carica il pacchetto per la rappresentazione grafica 3D
#
attach(ais) # consente di impiegare direttamente i nomi delle variabili
#  
# grafico 3D che può essere ruotato con il mouse
#  
scatter3d(rcc, y=hg, z=hc) 
#  
detach(ais) # termina l'impiego diretto dei nomi delle variabili
#

Dopo avere caricato i due pacchetti necessari, la funzione attach(ais) consente anche questa volta di realizzare il grafico impiegando direttamente i nomi delle variabili senza specificare per ciascuna di esse la tabella (ais) nella quale sono incluse (notare nuovamente la differenza con i primi due script).

Il grafico viene realizzato con la funzione scatter3d() specificando come argomento solamente le variabili della tabella ais da rappresentare (rcc, hg, hc), mentre per tutti gli altri argomenti, colori inclusi, sono stati lasciati i valori di default.

Come nel caso del grafico precedente si tratta di un grafico interattivo, e se lo “afferrate” [7] facendo click su di esso con il tasto sinistro del mouse e tenendolo premuto senza rilasciarlo, potete ruotarlo a vostro piacimento spostando il mouse. In questo modo sono state realizzate le immagini che, qui mostrate affiancate, forniscono due delle viste [della distribuzione] dei dati che è possibile ottenere. 


Concludiamo con un grafico 3D animato, molto semplice, ma che apre in R un mondo, al quale si rimandano gli interessati [8].
 
Copiate e incollate nella Console di R il quinto e ultimo script e premete ↵ Invio:

# GRAFICO 3D ANIMATO impiega il pacchetto rgl
#  
library(DAAG) # carica il pacchetto che include il set di dati/tabella ais 
library(rgl) # carica il pacchetto per la rappresentazione grafica 3D
#  
# grafico 3D animato
#  
plot3d(ais$rcc, y=ais$hg, z=ais$hc, type="p", col="red", size=3) 
play3d(spin3d(axis=c(0,0,1), rpm=10), duration=30) 
#  

Dopo avere caricato i due pacchetti necessari, il primo contenente i dati e il secondo contenente le funzioni grafiche, il grafico 3D viene realizzato con la funzione plot3d() del pacchetto rgl già impiegata nel terzo degli script riportati sopra (vedi).

Nella riga successiva con la funzione play3d() viene realizzata una animazione del grafico:
→ con i parametri specificati dalla funzione spin3d() che sono l'asse sul quale fare ruotare l'animazione, nel nostro caso  l'asse delle z (0,0,1), e il numero di rotazioni al minuto (rpm=10). 
 delladurata di 30 secondi (duration=30)

Il grafico 3D animato risultante, che è quello riportato anche in apertura del post, è interessante non tanto per l'aspetto coreografico, ma piuttosto in quanto offre una serie di visuali che consentono di apprezzare appieno la relazione di linearità che intercorre tra le tre variabili rappresentate.


Nonostante gli script riportati sopra siano stati limitati all'essenziale [3], potete immediatamente riutilizzarli per una rappresentazione non banale dei vostri dati semplicemente sostituendo ai nomi delle variabili qui impiegati i nomi delle vostre variabili x, y e z.

Per una guida rapida all'importazione dei dati in R potete consultare i link:
→ importazione dei dati da un file .csv
→ importazione dei dati da un file .xls o .xlsx
→ gestione dei dati mancanti

Infine ricordo che nel post Salvare i grafici di R in un file è riportato uno script che consente di trasformare i grafici in immagini e salvarli sotto forma di file .bmp, .jpeg, .png, .pdf, .ps per poterli stampare, archiviare, inserire in una pubblicazione, in un post o in un sito web. 


-----------

[1] Pacchetti aggiuntivi in quanto vanno ad aggiungersi al pacchetto base di RDopo avere scaricato il pacchetto Rcmdr chiudere e riavviare R, quindi digitare nella Console di R library(Rcmdr) e premere ↵ Invio per scaricare dal CRAN gli ulteriori pacchetti aggiuntivi necessari al suo funzionamento, infine nuovamente chiudere e riavviare R.

[2] Se non volete installare il pacchetto potete in alternativa fare il download di un file contenente gli stessi dati, come riportato nel post Il set di dati ais e alla pagina Dati.

[3] La parte corpuscolata del sangue include eritrociti, leucociti e piastrine, ma dato che gli ultimi due in condizioni normali occupano un volume irrilevante, la quota di sangue occupata dalla parte corpuscolata (il valore ematòcrito) è di fatto quella occupata dagli eritrociti (globuli rossi).

[4] Per la documentazione completa delle funzioni e dei rispettivi argomenti vedere i manuali di riferimento dei pacchetti scatterplot3d, plot3D, rgl e Rcmdr sul repository della documentazione: Available CRAN Packages By Name. URL consultato il 10/11/2021: https://bit.ly/3zLwHWH


[6] Altre cose interessanti le trovate su Impressive package for 3D and 4D graph - R software and data visualization. URL consultato il 10/11/2021: https://bit.ly/3mKEeC1

[7] Attenzione perché il grafico potrebbe essere nascosto in parte o completamente dalla finestra di R Commander che si apre, al bisogno minimizzatela.

[8] Vedere ad esempio Animated 3d chart with R in: The R Graph Gallery. URL consultato il 10/11/2021: https://bit.ly/3BXySI4


Nessun commento:

Posta un commento