domenica 21 gennaio 2024

Grafici 3D con i dati etichettati

Nello studio della relazione di funzione che lega tra loro tre variabili può essere utile la loro rappresentazione in un grafico tridimensionale (grafico 3D). Qui vediamo come sia possibile riportare i dati associando a ciascuno di essi una etichetta che ne consenta la immediata identificazione all'interno del grafico.

Come dati impieghiamo i valori di BMI (indice di massa corporea) rilevati a livello europeo alcuni anni fa e pubblicati dall'Istat [1].

Per proseguire è necessario:
→ effettuare il download del file di dati bmi.csv
→ salvare il file nella cartella C:\Rdati\

Per il file di dati trovate link e modalità di download alla pagina Dati, ma potete anche semplicemente copiare i dati riportati qui sotto aggiungendo un ↵ Invio al termine dell'ultima riga e salvarli in C:\Rdati\ in un file di testo denominato bmi.csv (assicuratevi che il file sia effettivamente salvato con l'estensione .csv).

Nazione;sottopeso;normale;sovrappeso;obeso
Austria;2.4;49.6;33.3;14.7
Belgio;2.7;48.0;35.3;14.0
Bulgaria;2.2;43.8;39.2;14.8
Cipro;3.9;47.8;33.8;14.5
Croazia;1.9;40.7;38.7;18.7
Danimarca;2.2;50.0;32.9;14.9
Estonia;2.2;43.9;33.5;20.4
Finlandia;1.2;44.1;36.4;18.3
Francia;3.2;49.6;31.9;15.3
Germania;1.8;46.1;35.2;16.9
Grecia;1.9;41.3;39.4;17.3
Irlanda;1.9;42.3;37.0;18.7
Lettonia;1.7;41.8;35.2;21.3
Lituania;1.9;42.5;38.3;17.3
Lussemburgo;2.8;49.3;32.4;15.6
Malta;2.0;37.0;35.0;26.0
Olanda;1.6;49.0;36.0;13.3
Polonia;2.4;42.9;37.5;17.2
Portogallo;1.8;44.6;36.9;16.6
Regno Unito;2.1;42.2;35.6;20.1
Repubblica Ceca;1.1;42.1;37.6;19.3
Romania;1.3;42.9;46.4;9.4
Slovacchia;2.1;43.6;38.0;16.3
Slovenia;1.6;41.8;37.4;19.2
Spagna;2.2;45.4;35.7;16.7
Svezia;1.8;48.3;35.9;14.0
Ungheria;2.9;41.9;34.0;21.2

Inoltre dovete scaricare dal CRAN il pacchetto aggiuntivo rgl [2].  Copiate e incollate nella Console di R questo script, se necessario iconizzate la Console di R per visualizzare il grafico:

# GRAFICO 3D INTERATTIVO CHE PUO' ESSERE RUOTATO CON IL MOUSE
# accanto a ciascun punto viene riportata l'etichetta che lo identifica 
#
library(rgl) # carica il pacchetto per la rappresentazione grafica 3D
data <- read.table("c:/Rdati/bmi.csv", header=TRUE, sep=";") # importa i dati
#
with(data, plot3d(normale, sovrappeso, obeso, type="p", col="red", size=6)) # genera il grafico 3d
with(data, text3d(normale, sovrappeso, obeso, Nazione, cex=0.8)) # identifica ciascun punto con una etichetta
#

Nelle due prime righe con library() viene caricato il pacchetto rgl e con read.table() i dati sono importati nell'oggetto data.

Quindi viene impiegata due volte la funzione with() che specifica i dati da impiegare (data) e la funzione da applicare. La prima volta con la funzione plot3d() viene realizzato il grafico 3D, la seconda volta con la funzione text3d() accanto a ciascun dato viene riportata la scritta/etichetta contenuta nella variabile Nazione.

Se avete dubbi sui valori che possono assumere gli argomenti type, col, size e cex potete come sempre trovare aiuto digitando help(nomedellafunzione) nella Console di R.

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 è stata realizzata – dopo avere ingrandito la finestra grafica a tutto schermo – l'immagine seguente che fornisce una delle tante possibili viste [della distribuzione] dei dati. 


Se infine volete una animazione che presenti il grafico sotto le varie possibili angolazioni copiate e incollate nella Console di R quest'altra riga di codice, se necessario iconizzate la Console di R per visualizzare il grafico:

#
with(data, play3d(spin3d(axis=c(0,0,1), rpm=3), duration=60)) # fa ruotare il grafico per 60 secondi
#

Si impiega di nuovo la funzione with() che specifica i dati da impiegare (data) e la funzione da applicare, che questa volta è la funzione play3d(), all'interno della quale:
→ la funzione spin3d() fa ruotare il grafico attorno all'asse specificato da axis=c() alla velocità di 3 giri al minuto (rpm=3);
→ il successivo argomento stabilisce per l'animazione una durata di 60 secondi (duration=60). 


----------

[1] Vedere il post Indice di massa corporea (BMI).

[2] Per la documentazione completa delle funzioni e dei rispettivi argomenti vedere il manuale di riferimento del pacchetto rgl sul repository della documentazione: Available CRAN Packages By Name. URL consultato il 10/11/2021: https://bit.ly/3zLwHWH


Nessun commento:

Posta un commento