Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


Il Laboratorio di Analisi dei Dati con R, dell'Università di Teramo su piattaforma Meet, inizia il 9 aprile 2021 - Iscrizione - email
r:ggplot2:grafici_a_barre

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

Fig. 1: Grafico a barre semplice

Usiamo l'argomento fill per modificare il colore delle barre:

farms %>% 
  ggplot(aes(x = Manag)) +
  geom_bar(fill = "orange")
&nolink |

Fig. 2: Grafico a barre con un colore

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

Fig. 3: Grafico a barre colorato in base a una variabile

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

Fig. 4: Grafico a barre sovrapposte

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
&nolink |

Fig. 5: Grafico a barre orizzontali

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

Fig. 6: Barre degli scarti da un punto (media)

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

Fig. 7: Grafico bivariato a barre sovrapposte

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

Fig. 8: Grafico bivariato a barre affiancate

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

Fig. 9: Grafico monovariato con barre ordinate

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()
r/ggplot2/grafici_a_barre.txt · Ultima modifica: 26/09/2021 07:38 da admin