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













