Corso
Gli istogrammi mostrano a colpo d’occhio la forma della distribuzione di un dataset. In questo tutorial ti guiderò nella creazione e personalizzazione di istogrammi con ggplot2, la libreria di plotting più usata in R e parte fondamentale dell’ecosistema tidyverse. ggplot2 segue una “grammatica dei grafici” che ti permette di costruire visualizzazioni complesse sovrapponendo elementi del grafico. Per un approccio con R base, vedi il nostro tutorial sugli istogrammi con R base.
TL;DR
-
Usa
geom_histogram()all’interno di una chiamata aggplot()per tracciare un istogramma -
Controlla il numero di bin con
binso la larghezza dei bin conbinwidthdentrogeom_histogram() -
Personalizza i colori delle barre con gli argomenti
color(bordo) efill(riempimento) -
Sovrapponi una curva di densità usando
geom_density()dopo aver impostatoy = after_stat(density) -
Suddividi per categoria usando
fill = variableinaes()ofacet_grid()per pannelli separati
Che cos’è un istogramma?
Gli istogrammi sono visualizzazioni che mostrano distribuzioni di frequenza su variabili continue (numeriche). Permettono di vedere il conteggio delle osservazioni nei range coperti dalla variabile continua.
Per iniziare con ggplot2
Per seguire questo tutorial, ti serve R installato e i seguenti pacchetti: ggplot2, readr e dplyr. Il codice nella prossima sezione li installa se non li hai già.
Installazione dei pacchetti
Per prima cosa importeremo la libreria ggplot2 usando la funzione library. Questo renderà disponibili tutte le funzioni integrate della libreria ggplot2. Se non hai già installato ggplot2, dovrai farlo eseguendo il comando install.packages(). Faremo lo stesso per la libreria readr, che ci permetterà di leggere un file CSV, e per dplyr, che ci consente di lavorare più facilmente con i dati letti.
install.packages("ggplot2")
install.packages("readr")
install.packages("dplyr")
library(ggplot2)
library(readr)
library(dplyr)
Caricamento del dataset
Per questo tutorial useremo questo dataset immobiliare, che include dettagli su diversi annunci di case, tra cui la metratura, il numero di stanze, il prezzo e informazioni sulla posizione.
Possiamo leggere i dati usando la funzione read_csv(). Possiamo leggerli direttamente dall’URL oppure scaricare il file CSV in una cartella e leggerlo dall’archivio locale. Il primo argomento di read_csv() è il percorso dei dati e l’attributo col_select ci consente di scegliere le colonne di interesse.
home_data <- read_csv(
"https://raw.githubusercontent.com/rashida048/Datasets/master/home_data.csv",
col_select = c(price, condition)
)
Possiamo quindi visualizzare le prime righe di dati usando la funzione head():
head(home_data)

Come creare un istogramma con ggplot2
Ora possiamo creare l’istogramma. Indipendentemente dal tipo di grafico che creiamo in ggplot2, iniziamo sempre con la funzione ggplot(), che crea una tela su cui aggiungere gli elementi del grafico. Accetta due parametri.
-
Il primo argomento è un data frame. Qui vogliamo usare
home_data. -
Il secondo argomento è una mappatura dalle colonne del data frame alle estetiche del grafico. Questa mappatura deve richiamare la funzione
aes(). Qui mappiamo la colonna price all’asse x.
Finora, il nostro codice è
ggplot(data = home_data, aes(x = price))
Da solo, questo non disegnerà nulla di utile. Per trasformarlo in un istogramma, aggiungiamo la geometria dell’istogramma usando geom_histogram().
ggplot(data = home_data, aes(x = price)) +
geom_histogram()

Aggiungi statistiche descrittive a un istogramma usando geom_vline()
Possiamo aggiungere statistiche descrittive al grafico usando la funzione geom_vline(). Questa aggiunge al grafico una linea verticale.
Per prima cosa calcoliamo una statistica descrittiva, in questo caso il prezzo medio, usando summarize() di dplyr.
price_stats <- home_data |>
summarize(mean_price = mean(price))
price_stats
# A tibble: 1 × 1
mean_price
<dbl>
1 540088.
La funzione accetta il parametro xintercept e gli attributi opzionali color e linewidth per personalizzare rispettivamente colore e spessore delle linee. Aggiungeremo una linea della media usando il segno più come nella sezione precedente.
ggplot(home_data, aes(x = price)) +
geom_histogram() +
geom_vline(aes(xintercept = mean_price), price_stats, color = "red", linewidth = 2)
Nota che nelle funzioni geom_ gli argomenti mapping e data sono invertiti rispetto a ggplot().

Tracciare densità di probabilità invece dei conteggi
Per aggiungere una linea di densità di probabilità all’istogramma, prima cambiamo l’asse y in modo che sia scalato sulla densità. Nella funzione aes(), impostiamo y a after_stat(density).
Possiamo quindi aggiungere un livello di densità al grafico usando la funzione geom_density(). Qui impostiamo l’attributo color a verde e linewidth a 2.
ggplot(home_data, aes(x = price, y = after_stat(density))) +
geom_histogram() +
geom_vline(aes(xintercept = mean_price), price_stats, color = "red", linewidth = 2) +
geom_density(color = "green", linewidth = 2)

Nota che i numeri sull’asse y sono cambiati.
Osserva come ogni livello segue lo stesso schema: un segno +, una chiamata di funzione e argomenti opzionali. Puoi aggiungere funzioni geom_, statistiche e temi senza dover reimparare la sintassi per ogni combinazione.
Aggiorna il binning usando bins
Possiamo aggiornare il binning del nostro istogramma ggplot2 usando l’attributo dei bin. Impostiamo l’attributo dei bin uguale al numero di bin che vogliamo visualizzare nel grafico. Questo ci aiuterà a vedere dati più o meno granulari nel nostro istogramma.
ggplot(data = home_data, aes(x = price)) +
geom_histogram(bins = 100)

Possiamo anche impostare manualmente la larghezza dei bin usando l’attributo binwidth di geom_histogram().
ggplot(data = home_data, aes(x = price)) +
geom_histogram(binwidth = 50000)

Infine, puoi allineare i confini usando gli attributi center o boundary. Se vuoi che i confini dei bin cadano su multipli specifici, puoi usare questi attributi (se ne può usare solo uno alla volta). Per fare in modo che i bin finiscano su valori interi, imposta l’attributo uguale a 1.
ggplot(data = home_data, aes(x = price)) +
geom_histogram(boundary = 1)

Personalizza il colore dell’istogramma
In questa sezione cambieremo i colori dell’istogramma. Possiamo personalizzare il colore dei bordi di ciascuna barra usando l’attributo color e possiamo cambiare il riempimento delle barre usando l’attributo fill di geom_histogram(). Riempiamo le barre di blu e impostiamo il colore del bordo su bianco.
ggplot(data = home_data, aes(x = price)) +
geom_histogram(color = "white", fill = "blue")

Personalizza il colore dell’istogramma ggplot2 in base ai gruppi
Puoi personalizzare i colori delle barre dell’istogramma.
Modificando l’estetica fill (dentro la funzione aes()) cambierai i colori interni delle barre in base al valore di una variabile nel dataset. Quella variabile dovrebbe essere categorica (un fattore) piuttosto che intera, quindi possiamo convertirla usando la funzione factor(). In questo esempio, guarderemo la variabile condition, un valore che va da 1 (condizioni scarse) a 5 (ottime condizioni).
home_data <- home_data |>
mutate(condition = factor(condition))
ggplot(data = home_data, aes(x = price, fill = condition)) +
geom_histogram()

Aggiungi etichette e titoli con labs()
Ora aggiungiamo titoli ed etichette al grafico usando la funzione labs(). Impostiamo gli attributi x, y e title sulle etichette desiderate.
ggplot(data = home_data, aes(x = price)) +
geom_histogram() +
labs(x ='Price (USD)', y='Number of Listings', title = 'Housing Price Distributions')

Impostare i limiti dell’asse x con xlim()
Possiamo impostare i limiti dell’asse x del grafico usando la funzione xlim() per zoomare sui dati che ci interessano. Ad esempio, a volte è utile concentrarsi sulla parte centrale della distribuzione piuttosto che sulla lunga coda che vediamo quando osserviamo l’intero grafico.
È possibile anche cambiare i limiti dell’asse y (usando ylim()), ma è meno utile per gli istogrammi perché i valori calcolati automaticamente sono quasi sempre ideali.
Faremo uno zoom sui prezzi tra 0 $ e 2 M$.
ggplot(home_data, aes(x = price)) +
geom_histogram(bins = 100) +
xlim(0, 2000000)

Cambiare la posizione della legenda
Se vogliamo spostare la legenda nel grafico, ad esempio quando visualizziamo la condition con colori diversi, possiamo usare la funzione theme() e l’attributo legend.position. I valori che legend.position accetta sono “bottom”, “top”, “left” o “right”. Puoi anche passare le coordinate desiderate per la legenda usando c(x, y).
ggplot(home_data, aes(x = price, fill = condition)) +
geom_histogram() +
theme(legend.position = "bottom")
Usare i facet in ggplot2
Infine, possiamo visualizzare i dati di diversi gruppi in grafici separati usando i facet. Questo suddividerà la visualizzazione in diversi sottografici per ciascuna categoria. Si può fare usando la funzione facet_grid(). Di seguito visualizzeremo le distribuzioni dei prezzi per i diversi valori di condition.
ggplot(home_data, aes(x = price)) +
geom_histogram() + facet_grid(vars(condition))
I facet sono trattati più in dettaglio nel tutorial Faceting con ggplot in R.

Considerazioni finali
Per creare un istogramma in ggplot2, costruisci la base con ggplot(), passa il tuo data frame e la mappatura aes(), quindi aggiungi geom_histogram(). Da lì, sovrapponi le personalizzazioni: labs() per i titoli degli assi, xlim() per fare zoom sull’asse x e theme() per riposizionare la legenda o regolare lo stile visivo.
ggplot2 è trattato in profondità nel percorso di competenze Data Visualization in R, a partire da Introduzione alla Data Visualization con ggplot2. Puoi imparare a combinare ggplot2 con altri strumenti del tidyverse nel percorso di competenze Fondamenti del Tidyverse con R.
Per altri tipi di grafici ggplot2 oltre agli istogrammi, vedi il nostro tutorial su ggplot2 e scarica una copia del cheat sheet di ggplot2 come riferimento pratico.
Autrice di Data Science | Senior Technical Marketing Analyst presso Wayfair | MSE in Data Science all'Università della Pennsylvania

