Vai al contenuto principale

Istogramma ggplot2 in R: tutorial completo con esempi

Impara a creare e personalizzare istogrammi ggplot2 in R, dai grafici di base a quelli colorati, con facet e con densità sovrapposta.
Aggiornato 29 set 2026  · 7 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

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 a ggplot() per tracciare un istogramma

  • Controlla il numero di bin con bins o la larghezza dei bin con binwidth dentro geom_histogram()

  • Personalizza i colori delle barre con gli argomenti color (bordo) e fill (riempimento)

  • Sovrapponi una curva di densità usando geom_density() dopo aver impostato y = after_stat(density)

  • Suddividi per categoria usando fill = variable in aes() o facet_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)

Prime righe del dataset immobiliare che mostrano le colonne price e condition

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()

Istogramma ggplot2 di base dei prezzi delle case

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().

Istogramma ggplot2 con una linea verticale rossa della media del prezzo aggiunta con geom_vline()

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)

image4.png

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)

image12.png

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)

image5.png

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)

Istogramma ggplot2 con confini dei bin allineati usando l’argomento boundary

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")

Istogramma ggplot2 con bordi bianchi e riempimento blu

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()

Istogramma ggplot2 con barre colorate per categoria di condizione dell’immobile

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')

Istogramma ggplot2 con etichette personalizzate per asse x, asse y e titolo

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)

Istogramma ggplot2 con zoom sui prezzi tra 0 $ e 2 M$ usando xlim()

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.

image2.png

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.


Author
Kevin Babitz
LinkedIn

Autrice di Data Science | Senior Technical Marketing Analyst presso Wayfair | MSE in Data Science all'Università della Pennsylvania

Argomenti
R
Data Science
Data Visualization

Impara R con DataCamp!

Corso

Introduzione alla visualizzazione dei dati con ggplot2

4 ore
191.2K
Impara a creare visualizzazioni di dati significative e belle con ggplot2 capendo la grammatica della grafica.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro