Indice
Grafici a barre (ggplot2)
Con ggplot2, i grafici a barre possono essere realizzati con il comando geom_bar
.
Con una variabile
Grafico a barre della variabile “Manag” del dataset “MASS”
Grafico a barre semplice
A barre affiancate
Per ottenere un grafico a barre di un fattore, l'unico argomento di aes
richiesto è x
, ovvero il fattore da rappresentare.
# Chiamiamo i pacchetti necessari library(MASS) library(tidyverse) farms %>% ggplot(aes(x = Manag)) + geom_bar()

Usiamo l'argomento fill
per modificare il colore delle barre:
farms %>% ggplot(aes(x = Manag)) + geom_bar(fill = "orange")

Per ottenere una barra di colore diverso per ciascun livello del fattore, usiamo fill
in aes()
, indicando la variabile. In questo caso, infatti, il colore è l'esito della mappatura della variabile stessa, e non un attributo delle barre (vedi Mappatura):
farms %>% ggplot(aes(x = Manag)) + geom_bar(aes(fill = Manag))

A barre sovrapposte
Indichiamo come variabile da rappresentare sull'asse delle X un fattore di una sola modalità, e fill = Manag
per rappresentare le modalità della variabile:
farms %>% ggplot(aes(x = factor(1))) + # fattore = 1 geom_bar(width = 0.4, # larghezza della barra aes(fill = Manag)) + theme_minimal()

Grafico a barre orizzontali
Il grafico a barre orizzontali si ottiene aggiungendo coord_flip()
. Qui è stata aggiunta anche l'etichetta di uno degli assi (vedi: Titoli dei grafici (ggplot2)).
farms %>% ggplot(aes(x = Manag)) + geom_bar(fill = "blue") + coord_flip() + ylab("Frequenze") # titolo dell'asse Y

Differenza da un punto (ad esempio: scarti dalla media)
Orange %>% # creo una variabile "scarti": mutate("scarti" = circumference - mean(circumference)) %>% ggplot(aes(x = Tree, y = scarti)) + geom_col(width = 0.7, aes(fill = scarti)) + ylab("circumference (scarti)") + theme_minimal() + coord_flip()

Vedi anche:
Con due variabili
Usiamo l'argomento fill
in aes()
per rappresentare la seconda variabile: fill = Use
.
vedi Mappatura
Grafici a barre sovrapposte
Il grafico viene prodotto a barre sovrapposte di default.
farms %>% ggplot(aes(Manag)) + geom_bar(aes(fill = Use))

Grafici a barre raggruppate
Per ottenere dei grafici a barre raggruppate, utilizzeremo l'argomento position=“dodge”
farms %>% ggplot(aes(Manag)) + geom_bar(aes(fill = Use), position="dodge")

position=position_dodge2(preserve = “single”)
restituisce barre affiancate di pari ampiezza.
farms %>% ggplot(aes(Manag)) + geom_bar(aes(fill = Use), position = position_dodge2(preserve = "single")) + theme_light()

Con tabelle o altri dati riassuntivi
Se i dati da rappresentare sono già in forma di tabella, e cioè consistono in frequenze (o altri valori quantitativi), naturalmente associati a modalità di una variabile categoriale, si usa la funzione geom_col()
.
# costruiamo una tabella di esempio tab1 <- as.data.frame(table(farms$Manag)) colnames(tab1) <- c("Manag", "Freq") tab1
## Manag Freq ## 1 BF 3 ## 2 HF 5 ## 3 NM 6 ## 4 SF 6
Otterremmo il grafico in Fig. 1 con il seguente codice:
tab1 %>% ggplot(aes(Manag, Freq)) + geom_col()
Con barre ordinate in base alle frequenze
farms %>% group_by(Manag) %>% count() %>% # ordine decrescente ggplot(aes(x = reorder(Manag, -n), y = n, fill = Manag)) + geom_col()

Notare che, a meno di ulteriori modifiche, nella legenda le modalità della variabile sono disposte nell'ordine standard (alfabetico).
A barre multiple
Riferimenti sulle funzioni
Script di esempio
- Es Barplot ggplot2.R
library(tidyverse) # il dataset di esempio è nel pacchetto MASS require(MASS) # barre verticali farms %>% ggplot(aes(x = Manag)) + geom_bar() # colore arancione farms %>% ggplot(aes(x = Manag)) + geom_bar(fill = "orange") # colore definito dalla variabile (mapping) farms %>% ggplot(aes(x = Manag)) + geom_bar(aes(fill = Manag)) # a barre sovrapposte farms %>% ggplot(aes(x = factor(1))) + # fattore = 1 geom_bar(width = 0.4, # larghezza della barra aes(fill = Manag)) + theme_minimal() # barre orizzontali farms %>% ggplot(aes(x = Manag)) + geom_bar(fill = "blue") + coord_flip() + ylab("Frequenze") # differenza da un punto Orange %>% # creo una variabile "scarti": mutate("scarti" = circumference - mean(circumference)) %>% ggplot(aes(x = Tree, y = scarti)) + geom_col(width = 0.7, aes(fill = scarti)) + ylab("circumference (scarti)") + theme_minimal() + coord_flip() # DUE VARIABILI # barre sovrapposte farms %>% ggplot(aes(x = Manag)) + geom_bar(aes(fill = Use)) # barre raggruppate farms %>% ggplot(aes(Manag)) + geom_bar(aes(fill = Use), position="dodge") ## TABELLE E DATI RIASSUNTIVI # tabella di esempio tab1 <- as.data.frame(table(farms$Manag)) colnames(tab1) <- c("Manag", "Freq") # geom_col tab1 %>% ggplot(aes(Manag, Freq)) + geom_col() ## BARRE ORDINATE IN BASE A FREQUENZE farms %>% group_by(Manag) %>% count() %>% # ordine decrescente ggplot(aes(x = reorder(Manag, -n), y = n, fill = Manag)) + geom_col()