Come creare una piramide della popolazione in r


Una piramide della popolazione è un grafico che mostra la distribuzione per età e sesso di una determinata popolazione. Questo è un grafico utile per comprendere facilmente la composizione di una popolazione e l’attuale tendenza di crescita della popolazione.

Se una piramide della popolazione ha una forma rettangolare, indica che una popolazione sta crescendo a un ritmo più lento; le generazioni più vecchie vengono sostituite da nuove generazioni approssimativamente della stessa dimensione.

Se una piramide della popolazione ha la forma di una piramide, indica che una popolazione sta crescendo a un ritmo più rapido; le generazioni più anziane producono generazioni nuove e più grandi.

Nel grafico, il sesso è mostrato sui lati sinistro e destro, l’età è mostrata sull’asse y e la percentuale o la quantità di popolazione è mostrata sull’asse x.

Questo tutorial spiega come creare una piramide della popolazione in R.

Creare una piramide della popolazione in R

Supponiamo di avere il seguente set di dati che mostra la composizione percentuale di una popolazione in base all’età (da 0 a 100 anni) e al sesso (M = “Maschio”, F = “Femmina”):

 #make this example reproducible
set.seed(1)

#create data frame
data <- data.frame(age = rep(1:100, 2), gender = rep(c("M", "F"), each = 100))

#add variable population
data$population <- 1/sqrt(data$age) * runif(200, 10000, 15000)

#convert population variable to percentage
data$population <- data$population / sum(data$population) * 100

#view first six rows of dataset
head(data)

# age gender population
#1 1M 2.424362
#2 2M 1.794957
#3 3M 1.589594
#4 4M 1.556063
#5 5M 1.053662
#6 6M 1.266231

Possiamo creare una piramide della popolazione di base per questo set di dati utilizzando la libreria ggplot2 :

 #load ggplot2
library(ggplot2)

#create population pyramid
ggplot(data, aes(x = age, fill = gender,
                 y = ifelse(test = gender == "M",
                            yes = -population, no = population))) + 
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = abs, limits = max(data$population) * c(-1,1)) +
  coordinate_flip()

Aggiunta di titoli e tag

Possiamo aggiungere sia titoli che etichette degli assi alla piramide della popolazione utilizzando l’argomento labs() :

 ggplot(data, aes(x = age, fill = gender,
                 y = ifelse(test = gender == "M",
                            yes = -population, no = population))) + 
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = abs, limits = max(data$population) * c(-1,1)) +
  labs(title = "Population Pyramid", x = "Age", y = "Percent of population") +
  coordinate_flip()

Cambia i colori

Possiamo cambiare i due colori usati per rappresentare i generi usando l’argomento scale_color_manual() :

 ggplot(data, aes(x = age, fill = gender,
                 y = ifelse(test = gender == "M",
                            yes = -population, no = population))) + 
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = abs, limits = max(data$population) * c(-1,1)) +
  labs(title = "Population Pyramid", x = "Age", y = "Percent of population") +
  scale_color_manual(values = c("pink", "steelblue"),
aesthetics = c("color", "fill")) +
  coordinate_flip()

Piramidi di età multiple

È anche possibile tracciare insieme più piramidi di popolazione utilizzando l’argomento facet_wrap() . Ad esempio, supponiamo di avere dati sulla popolazione per i paesi A, B e C. Il codice seguente illustra come creare una piramide della popolazione per ciascun paese:

 #make this example reproducible
set.seed(1)

#create data frame
data_multiple <- data.frame(age = rep(1:100, 6),
                   gender = rep(c("M", "F"), each = 300),
                   country = rep(c("A", "B", "C"), each = 100, times = 2))

#add variable population
data_multiple$population <- round(1/sqrt(data_multiple$age)*runif(200, 10000, 15000), 0)

#view first six rows of dataset
head(data_multiple)

# age gender country population
#1 1 MA 11328
#2 2 MA 8387
#3 3 MA 7427
#4 4 MA 7271
#5 5 MA 4923
#6 6 MA 5916

#create one population pyramid per country
ggplot(data_multiple, aes(x = age, fill = gender,
                          y = ifelse(test = gender == "M",
                                     yes = -population, no = population))) + 
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = abs, limits = max(data_multiple$population) * c(-1,1)) +
  labs(y = "Population Amount") + 
  coordinate_flip() +
  facet_wrap(~country) +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) #rotate x-axis labels

Cambia tema

Infine, possiamo cambiare il tema della grafica. Ad esempio, il codice seguente utilizza theme_classic() per rendere la grafica più minimalista:

 ggplot(data_multiple, aes(x = age, fill = gender,
                          y = ifelse(test = gender == "M",
                                     yes = -population, no = population))) + 
  geom_bar(stat = "identity") +
  scale_y_continuous(labels = abs, limits = max(data_multiple$population) * c(-1,1)) +
  labs(y = "Population Amount") + 
  coordinate_flip() +
  facet_wrap(~country) +
theme_classic() + 
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Oppure puoi utilizzare ggthemes personalizzati. Per un elenco completo di ggthemes, consultare la pagina della documentazione .

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *