Grafico a barre e istogramma in R con esempio
⚡ Riepilogo intelligente
I grafici a barre e gli istogrammi in R sono costruiti con ggplot2, utilizzando geom_bar() per i conteggi categorici e geom_histogram() per le distribuzioni continue. Questa procedura guidata personalizza il colore, il gruppoping, impilamento, orientamento, binning ed etichette all'interno della barra sul dataset mtcars.

Cos'è un grafico a barre in R?
Un grafico a barre è un ottimo modo per visualizzare le variabili categoriali sull'asse x. Questo tipo di grafico denota due aspetti nell'asse y.
- Il primo conta il numero di occorrenze in ciascun gruppo.
- Il secondo grafico mostra una statistica riassuntiva (minimo, massimo, media e così via) di una variabile sull'asse y.
Utilizzerai il dataset mtcars, che contiene le seguenti variabili:
- cil: numero del cilindro dell'auto. Variabile numerica
- am: Tipo di trasmissione. 0 per automatico e 1 per manuale. Variabile numerica
- mpg: miglia per gallone. Variabile numerica
Poiché un istogramma è molto simile a un altro, vale la pena chiarire la differenza prima di scrivere qualsiasi codice.
Grafico a barre vs. istogramma in R: differenze principali
I due grafici si assomigliano e vengono costantemente confusi. Rispondono a domande diverse e utilizzano oggetti geometrici diversi.
| Criteri | Grafico a barre | Istogramma |
|---|---|---|
| variabile dell'asse X | Categoriale o fattoriale | Continuo e numerico |
| Cosa rappresenta un bar | Una categoria | Un intervallo, o bin, di valori |
| Spazi tra le barre | Sì, le categorie sono separate | No, i bidoni sono adiacenti |
| Ordine del bar | Può essere riorganizzato liberamente | Fissato dalla scala numerica |
| Domanda con risposta | Come si confrontano i gruppi? | Come viene distribuita una variabile? |
| oggetto ggplot2 | geom_bar() | geom_histogram() |
La regola generale: se riordinando le barre avrebbe ancora senso, hai un grafico a barre. Se riordinandole ne distruggerebbe il significato, hai un istogramma. Per i riepiloghi basati sui quartili della stessa variabile continua, usa un trama a scatola.
Come creare un grafico a barre in R
Per creare il grafico in R, puoi utilizzare la libreria ggplot che crea grafici pronti per la pubblicazione. La sintassi di base di questa libreria è:
ggplot(data, mapping = aes()) + geometric object arguments: data: dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common objects are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Questo tutorial si concentra sull'oggetto geometrico geom_bar(), che disegna il grafico a barre, e su geom_histogram() per i dati continui.
Grafico a barre: conteggio
Il tuo primo grafico mostra la frequenza del cilindro con geom_bar(). Il codice seguente è la sintassi più elementare.
library(ggplot2) # Most basic bar chart ggplot(mtcars, aes(x = factor(cyl))) + geom_bar()
Code Spiegazione
- Passi il set di dati mtcars a ggplot.
- All'interno dell'argomento aes(), si imposta l'asse x sulla variabile fattoriale cyl
- Il segno + significa che vuoi che R continui a leggere il codice. Rende il codice più leggibile rompendolo.
- Usa geom_bar() per l'oggetto geometrico.
Produzione:
Note:: assicurati di convertire le variabili in un fattore altrimenti R tratta le variabili come numeriche. Guarda l'esempio qui sotto.
Personalizza il grafico
È possibile passare quattro argomenti per personalizzare il grafico:
- `stat`: Controls what is plotted on the y-axis. By default `count`, which tallies rows. To plot a value you already computed, pass `stat = "identity"`
- `alpha`: Control density of the color
- `fill`: Change the color of the bar
- `size`: Control the size the bar
Cambia il colore delle barre
Puoi cambiare il colore delle barre. Tieni presente che i colori delle barre sono tutti simili.
# Change the color of the bars ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(fill = "coral") + theme_classic()
Code Spiegazione
- I colori delle barre sono controllati dalla mappa aes()ping all'interno dell'oggetto geometrico (ovvero non in ggplot()). È possibile modificare il colore tramite gli argomenti di riempimento. In questo caso, si sceglie il colore corallo.
Produzione:
Puoi usare questo codice:
grDevices::colors()
per vedere tutti i colori disponibili in R. Ci sono circa 650 colori.
Cambia l'intensità
Puoi aumentare o diminuire l'intensità del colore delle barre
# Change intensity ggplot(mtcars, aes(factor(cyl))) + geom_bar(fill = "coral", alpha = 0.5) + theme_classic()
Code Spiegazione
- Per aumentare o diminuire l'intensità della barra, è possibile modificare il valore di alpha. Un valore di alpha elevato aumenta l'intensità, mentre un valore di alpha basso la riduce. Il valore di alpha varia da 0 a 1. Con un valore di 1, il colore corrisponde esattamente alla tavolozza; con un valore di 0, la barra è invisibile. In questo caso, si sceglie alpha = 0.5.
Produzione:
Colora per gruppi
Puoi cambiare i colori delle barre, ovvero un colore diverso per ogni gruppo. Ad esempio, la variabile cyl ha tre livelli, quindi puoi tracciare il grafico a barre con tre colori.
# Color by group ggplot(mtcars, aes(factor(cyl), fill = factor(cyl))) + geom_bar()
Code Spiegazione
- L'argomento `fill` all'interno della funzione `aes()` cambia il colore della barra. Il colore si cambia impostando `fill` sulla variabile dell'asse x. Nel tuo esempio, la variabile dell'asse x è `cyl`; `fill = factor(cyl)`
Produzione:
Aggiungi un gruppo nelle barre
Puoi ulteriormente dividere l'asse y in base a un altro livello di fattore. Ad esempio, puoi contare il numero di trasmissioni automatiche e manuali in base al tipo di cilindro.
Procederai come segue:
- Passaggio 1: crea il frame di dati con il set di dati mtcars
- Fase 2: etichetta la variabile am con auto per la trasmissione automatica e man per la trasmissione manuale. Converti am e cyl come fattore in modo da non dover usare factor() nella funzione ggplot().
- Passaggio 3: tracciare il grafico a barre per contare il numero di trasmissioni per cilindro
library(dplyr) # Step 1 data <- mtcars %>% #Step 2 mutate(am = factor(am, labels = c("auto", "man")), cyl = factor(cyl))
Una volta preparato il set di dati, è possibile tracciare il grafico:
# Passo 3
ggplot(data, aes(x = cyl, fill = am)) + geom_bar() + theme_classic()
Code Spiegazione
- La chiamata ggplot() riceve i dati del dataset e la mappa aes()ping.
- In aes() includi la variabile asse x e quale variabile è richiesta per riempire la barra (cioè am)
- geom_bar(): crea il grafico a barre
Produzione:
La mappaping La barra verrà riempita con due colori, uno per ogni livello. È facilissimo cambiare il gruppo scegliendo altre variabili fattoriali nel dataset.
Grafico a barre in percentuale
È possibile visualizzare la barra in percentuale anziché in conteggio grezzo.
# Grafico a barre in percentuale
ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = "fill") + theme_classic()
Code Spiegazione
- Utilizzare position = “fill” nell'argomento geom_bar() per creare un grafico con percentuale nell'asse y.
Produzione:
Barre affiancate
È facile tracciare il grafico a barre con la variabile del gruppo affiancata.
# Bar chart side by side ggplot(data, aes(x = cyl, fill = am)) + geom_bar(position = position_dodge()) + theme_classic()
Code Spiegazione
- position=position_dodge(): indica esplicitamente come disporre le barre
Produzione:
Grafico a barre con statistiche riassuntive
Nella seconda parte del tutorial, l'asse y riporta un valore calcolato anziché un conteggio. Si noti che si tratta ancora di un grafico a barre: un vero e proprio istogramma verrà trattato più avanti e utilizza un oggetto geometrico diverso.
Il tuo obiettivo è creare un grafico con il miglio medio per gallone per ciascun tipo di bombola. Per disegnare un grafico informativo, seguirai questi passaggi:
- Passaggio 1: crea una nuova variabile con il miglio medio per gallone per cilindro
- Passaggio 2: crea un istogramma di base
- Passaggio 3: modificare l'orientamento
- Passaggio 4: cambia il colore
- Passaggio 5: modificare la dimensione
- Passaggio 6: aggiungi etichette al grafico
Passo 1) Crea una nuova variabile
Crei un frame di dati denominato data_histogram che restituisce semplicemente le miglia medie per gallone in base al numero di cilindri dell'auto. Chiami questa nuova variabile mean_mpg e arrotondi la media con due decimali.
# Passo 1
data_histogram <- mtcars %>% mutate(cyl = factor(cyl)) %>% group_by(cyl) %>% summarize(mean_mpg = round(mean(mpg), 2))
Passo 2) Crea un istogramma di base
È possibile tracciare l'istogramma. Non è ancora abbastanza rifinito per essere consegnato a un cliente, ma mostra già l'andamento.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity")
Code Spiegazione
- Aes() ora ha due variabili. La variabile cyl si riferisce all'asse x e mean_mpg è l'asse y.
- Si passa stat = “identity” in modo che geom_bar() utilizzi la variabile dell'asse y così com'è, invece di contare le righe. Il valore predefinito per geom_bar() è stat = “count”.
Produzione:
Passo 3) Cambiare l'orientamento
Si modifica l'orientamento del grafico da verticale a orizzontale.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity") + coord_flip()
Code Spiegazione
- Puoi controllare l'orientamento del grafico con coord_flip().
Produzione:
Passo 4) Cambia il colore
È possibile differenziare i colori delle barre in base al livello del fattore della variabile dell'asse x.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + coord_flip() + theme_classic()
Code Spiegazione
- È possibile tracciare il grafico per gruppi con fill= cyl mapping. R gestisce automaticamente i colori in base ai livelli della variabile cyl
Produzione:
Passo 5) Cambia la taglia
Per rendere il grafico più gradevole, riduci la larghezza della barra.
graph <- ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity", width = 0.5) + coord_flip() + theme_classic()
Code Spiegazione
- L'argomento width all'interno di geom_bar() controlla lo spessore della barra. Un valore maggiore la renderà più larga.
- Il grafico viene memorizzato nel grafo degli oggetti, perché il passaggio successivo lo riutilizza senza modifiche. La memorizzazione dei grafici intermedi mantiene il codice leggibile.
Produzione:
Passo 6) Aggiungi etichette al grafico
L'ultimo passaggio aggiunge il valore di mean_mpg come etichetta all'interno di ciascuna barra.
graph +
geom_text(aes(label = mean_mpg),
hjust = 1.5,
color = "white",
size = 3) +
theme_classic()
Code Spiegazione
- La funzione geom_text() è utile per controllare l'estetica del testo.
- label=: aggiunge un'etichetta all'interno delle barre
- mean_mpg: utilizza la variabile mean_mpg per l'etichetta
- hjust controlla la posizione dell'etichetta lungo la barra. Valori vicini a 1 la posizionano vicino all'estremità della barra, mentre valori maggiori la spingono verso l'asse. Se l'orientamento del grafico è verticale, sostituire hjust con vjust.
- color="bianco": cambia il colore del testo. Qui usi il colore bianco.
- size=3: imposta la dimensione del testo.
Produzione:
Come ordinare ed etichettare le barre in un grafico a barre in R
Due dettagli finali distinguono un grafico in bozza da uno pronto per la pubblicazione: ordinare le barre in base al valore e etichettare correttamente gli assi.
Riordino delle barrette. ggplot2 ordina i livelli dei fattori in ordine alfabetico per impostazione predefinita, che raramente è l'ordine più informativo. Racchiudi la variabile x nella funzione reorder() per ordinarla in base a una seconda variabile:
# Sort the bars from lowest to highest mean_mpg ggplot(data_histogram, aes(x = reorder(cyl, mean_mpg), y = mean_mpg)) + geom_bar(stat = "identity", fill = "coral") + theme_classic()
Anteponendo un segno meno alla variabile di ordinamento, reorder(cyl, -mean_mpg), si inverte la direzione.
Aggiunta di titoli ed etichette agli assi. La funzione labs() imposta ogni elemento di testo in una singola chiamata:
ggplot(data_histogram, aes(x = cyl, y = mean_mpg, fill = cyl)) + geom_bar(stat = "identity") + labs(title = "Average fuel economy by cylinder count", subtitle = "mtcars dataset", x = "Number of cylinders", y = "Mean miles per gallon", fill = "Cylinders", caption = "Source: mtcars") + theme_classic()
Imposta fill = NULL all'interno di labs() per eliminare completamente il titolo della legenda e usa theme(legend.position = “none”) per rimuovere la legenda quando l'asse x nomina già i gruppi.
Scegliere i propri colori. Sostituisci la tavolozza predefinita con una specifica in modo che il grafico corrisponda allo stile della tua casa:
scale_fill_manual(values = c("4" = "#0e9cd1", "6" = "coral", "8" = "grey40"))
Come creare un istogramma in R con geom_histogram()
Un istogramma mostra come è distribuita una singola variabile continua. Invece di contare le categorie, ggplot2 suddivide l'intervallo numerico in bin e conta quante osservazioni rientrano in ciascuno di essi.
library(ggplot2) # Most basic histogram ggplot(mtcars, aes(x = mpg)) + geom_histogram()
R visualizza un messaggio che consiglia di scegliere un numero di bin più appropriato, poiché il valore predefinito di 30 bin è arbitrario. Due argomenti controllano questo comportamento:
- bidoni: il numero di intervalli in cui suddividere l'intervallo.
- larghezza di banda: la larghezza di ciascun intervallo, espressa nelle unità della variabile. Utilizzare questo valore quando le unità sono significative.
# Set the number of bins ggplot(mtcars, aes(x = mpg)) + geom_histogram(bins = 10, fill = "coral", color = "white") + theme_classic() # Or set the width of each bin instead ggplot(mtcars, aes(x = mpg)) + geom_histogram(binwidth = 4, fill = "coral", color = "white") + theme_classic()
La suddivisione in intervalli (bin) è la scelta più importante in un istogramma. Un numero insufficiente di intervalli nasconde la struttura reale del grafico, come ad esempio un secondo picco; un numero eccessivo, invece, trasforma il grafico in un insieme di rumore. Provate diversi valori prima di sceglierne uno definitivo.
Confronto tra gruppi. Mappa un fattore da riempire e imposta la posizione in modo che le distribuzioni rimangano leggibili:
ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_histogram(bins = 10, position = "identity", alpha = 0.5) + theme_classic()
Con position = “identity” e un alpha ridotto, gli istogrammi si sovrappongono, consentendo di confrontare direttamente le forme. Utilizzare position = “dodge” se si preferisce visualizzare i bin uno accanto all'altro.
Densità anziché conteggio. Quando le dimensioni dei gruppi sono diverse, traccia la densità in modo che le aree siano comparabili e sovrapponi una curva levigata:
ggplot(mtcars, aes(x = mpg)) + geom_histogram(aes(y = after_stat(density)), bins = 10, fill = "coral", alpha = 0.6) + geom_density(color = "steelblue", linewidth = 1) + theme_classic()
Grafico a barre e istogramma in R: Code Referenze
Un grafico a barre si presta bene a un asse x categorico, dove l'asse y rappresenta un conteggio o una statistica riassuntiva. La tabella seguente elenca la chiamata a ggplot2 per ciascuna variante descritta in precedenza:
| Obiettivo | Code |
|---|---|
| Contare |
ggplot(df, aes(x = factor(x1))) + geom_bar() |
| Contare con un colore di riempimento diverso |
ggplot(df, aes(x = factor(x1), fill = factor(x1))) + geom_bar() |
| Contare con gruppi, impilati |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar() |
| Contare in gruppi, fianco a fianco |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = position_dodge()) |
| Conteggio con gruppi, impilati in% |
ggplot(df, aes(x = factor(x1), fill = factor(x2))) + geom_bar(position = "fill") |
| Valori (statistica riassuntiva) |
ggplot(df, aes(x = factor(x1), y = x2)) + geom_bar(stat = "identity") |
| Istogramma di una variabile continua |
ggplot(df, aes(x = x1)) + geom_histogram(bins = 30) |













