Grafico a barre e istogramma in R (con esempio)
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 tra i gruppi.
- Il secondo mostra una statistica riassuntiva (minimo, massimo, media e così via) di una variabile sull'asse y.
Utilizzerai il set di dati mtcars con 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
Come creare un grafico a barre
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()`
In questo tutorial sei interessato all'oggetto geometrico geom_bar() che crea il grafico a barre.
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()
Spiegazione del codice
- Passi il set di dati mtcars a ggplot.
- All'interno dell'argomento aes(), aggiungi l'asse x come fattore variabile(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`: Control the type of formatting. By default, `bin` to plot a count in the y-axis. For continuous value, 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()
Spiegazione del codice
- I colori delle barre sono controllati dalla mappatura aes() all'interno dell'oggetto geometrico (cioè non in ggplot()). Puoi cambiare il colore con gli argomenti di riempimento. Qui scegli il colore del 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()
Spiegazione del codice
- Per aumentare/diminuire l'intensità della barra è possibile modificare il valore dell'alfa. Un alfa elevato aumenta l'intensità, mentre un alfa basso riduce l'intensità. alfa varia da 0 a 1. Se 1, il colore è lo stesso della tavolozza. Se 0, il colore è bianco. Scegli alfa = 0.1.
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()
Spiegazione del codice
- L'argomento fill all'interno di aes() permette di cambiare il colore della barra. Puoi cambiare il colore impostando fill = variabile dell'asse x. Nel tuo esempio, la variabile dell'asse x è cyl; riempimento = fattore(cil)
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))
Hai il set di dati pronto, puoi tracciare il grafico;
# Passo 3
ggplot(data, aes(x = cyl, fill = am)) + geom_bar() + theme_classic()
Spiegazione del codice
- ggpplot() contiene i dati del set di dati e aes().
- 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 mappatura riempirà la barra con due colori, uno per ogni livello. È semplice cambiare il gruppo scegliendo altre variabili fattore nel set di dati.
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()
Spiegazione del codice
- 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()
Spiegazione del codice
- position=position_dodge(): indica esplicitamente come disporre le barre
Produzione:
Istogramma
Nella seconda parte del tutorial sul grafico a barre, puoi rappresentare il gruppo di variabili con valori nell'asse y.
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 è pronto per la comunicazione e per essere consegnato al cliente, ma ci dà un'intuizione sulla tendenza.
ggplot(data_histogram, aes(x = cyl, y = mean_mpg)) + geom_bar(stat = "identity")
Spiegazione del codice
- Aes() ora ha due variabili. La variabile cyl si riferisce all'asse x e mean_mpg è l'asse y.
- È necessario passare l'argomento stat="identity" per riferirsi alla variabile sull'asse y come valore numerico. geom_bar utilizza stat="bin" come valore predefinito.
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()
Spiegazione del codice
- 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()
Spiegazione del codice
- È possibile tracciare il grafico per gruppi con la mappatura fill= cyl. R si occupa automaticamente dei colori in base ai livelli della variabile cil
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()
Spiegazione del codice
- L'argomento larghezza all'interno di geom_bar() controlla la dimensione della barra. Un valore maggiore aumenta la larghezza.
- Nota, memorizzi il grafico nel grafico variabile. Lo fai perché il passaggio successivo non modificherà il codice del grafico della variabile. Migliora la leggibilità del codice.
Produzione:
Passo 6) Aggiungi etichette al grafico
L'ultimo passo consiste nell'aggiungere il valore della variabile mean_mpg nell'etichetta.
graph + geom_text(aes(label = mean_mpg), hjust = 1.5, color = "white", size = 3) + theme_classic()
Spiegazione del codice
- 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
- hcontrolla semplicemente la posizione dell'etichetta. Valori vicini a 1 visualizzano l'etichetta nella parte superiore della barra, mentre valori più alti portano l'etichetta in fondo. Se l'orientamento del grafico è verticale, cambia hjust in vjust.
- color="bianco": cambia il colore del testo. Qui usi il colore bianco.
- size=3: imposta la dimensione del testo.
Produzione:
Sintesi
Un grafico a barre è utile quando l'asse x è una variabile categoriale. L'asse y può essere un conteggio o una statistica riepilogativa. La tabella seguente riassume come controllare il grafico a barre con ggplot2:
Obiettivo | Code |
---|---|
Contare |
ggplot(df, eas(x= factor(x1)) + geom_bar() |
Contare con un colore di riempimento diverso |
ggplot(df, eas(x= factor(x1), fill = factor(x1))) + geom_bar() |
Contare con gruppi, impilati |
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar(position=position_dodge()) |
Contare in gruppi, fianco a fianco |
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar() |
Conteggio con gruppi, impilati in% |
ggplot(df, eas(x= factor(x1), fill = factor(x2))) + geom_bar(position=position_dodge()) |
Valori |
ggplot(df, eas(x= factor(x1)+ y = x2) + geom_bar(stat="identity") |