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_bolle

Grafici a bolle (ggplot)

I grafici a bolle, con ggplot2, sono in pratica una variazione dei Grafici a dispersione (scatterplot), che si producono con geom_point():

cars %>% 
  ggplot(aes(speed, dist)) +
  geom_point(aes(size = dist, col = speed))   
 
# oppure
cars %>% 
  ggplot(aes(speed, dist, 
             size = dist, col = speed)) +
  geom_point()     
&nolink |

Fig. 1: Grafico a bolle

Per rappresentare le dimensioni delle bolle, abbiamo utilizzato: aes(size = dist).

Possiamo anche definire la scala in cui rappresentare le quantità. Della “bolla”, infatti, possiamo far corrispondere alla quantità il raggio oppure l'area. Si consideri nella figura 2 la differenza (si tratta dei contagi cumulativi di SARS-Cov-2 al 12 marzo 2020, dati OMS):

&nolink |

Fig. 2: Confronto fra scale: area e raggio

Per fare in modo che sia l'area della bolla a rappresentare i valori, utilizzeremo la funzione

scale_size_area()

Per fare in modo che sia invece il raggio (il default):

scale_radius()

Possiamo anche definire i limiti di tali grandezze:

scale_size_area(max_size = 10)

e

scale_radius(range = c(1, 10))

La bolla “grande” è infatti identica nei due grafici (in entrambi i casi il valore massimo è 10).

Di seguito il codice dei due grafici:

# dati
dati_es <- data.frame("Country" = c("Italy", "China"),
                      "Cases" = c(12462, 80981))
 
# primo grafico
ggplot(dati_es,
       aes(x = Country, y = 0.5)) +
  geom_point(aes(size = Cases),
             alpha = 0.8,
             fill = "orange",
             col = "orange") +
  # sistema di riferimento
  ylim(0, 1) +
  # scala
  scale_size_area(max_size = 10) +
  geom_text(aes(label = Country,
                x = Country, y = 0.34), size = 3.5) +
  geom_text(aes(label = Cases,
                x = Country, y = 0.25), size = 3) +
  # eliminare griglie, assi e legenda
  theme(axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    legend.position = "none") +
  # sottotitolo
  labs(subtitle = "quantità rappresentata dall'area")

Il secondo grafico è identico, a parte:

scale_radius(range = c(1, 10))
labs(subtitle = "... e dal raggio")

Vedi anche:

r/ggplot2/grafici_a_bolle.txt · Ultima modifica: 25/09/2021 10:49 da admin