Comment créer une pyramide des âges dans R



Une pyramide des âges est un graphique qui montre la répartition par âge et par sexe d’une population donnée. Il s’agit d’un graphique utile pour comprendre facilement la composition d’une population ainsi que la tendance actuelle de la croissance démographique.

Si une pyramide des âges a une forme rectangulaire, cela indique qu’une population croît à un rythme plus lent ; les générations plus anciennes sont remplacées par de nouvelles générations à peu près de même taille.

Si une pyramide des âges a la forme d’une pyramide, cela indique qu’une population croît à un rythme plus rapide ; les générations plus âgées produisent de nouvelles générations plus nombreuses.

Dans le graphique, le sexe est indiqué sur les côtés gauche et droit, l’âge est indiqué sur l’axe des y et le pourcentage ou le montant de la population est indiqué sur l’axe des x.

Ce tutoriel explique comment créer une pyramide des âges dans R.

Créer une pyramide des âges dans R

Supposons que nous ayons l’ensemble de données suivant qui montre la composition en pourcentage d’une population en fonction de l’âge (0 à 100 ans) et du sexe (M = « Homme », F = « Femme ») :

#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 population variable
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   1      M   2.424362
#2   2      M   1.794957
#3   3      M   1.589594
#4   4      M   1.556063
#5   5      M   1.053662
#6   6      M   1.266231

Nous pouvons créer une pyramide des âges de base pour cet ensemble de données en utilisant la bibliothèque 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)) +
  coord_flip()

Ajout de titres et d’étiquettes

Nous pouvons ajouter à la fois des titres et des étiquettes d’axe à la pyramide des âges en utilisant l’argument 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") +
  coord_flip()

Modifier les couleurs

Nous pouvons modifier les deux couleurs utilisées pour représenter les genres en utilisant l’argument scale_colour_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_colour_manual(values = c("pink", "steelblue"),
                      aesthetics = c("colour", "fill")) +
  coord_flip()

Pyramides de âge multiples

Il est également possible de tracer plusieurs pyramides des âges ensemble en utilisant l’argument facet_wrap() . Par exemple, supposons que nous disposions de données démographiques pour les pays A, B et C. Le code suivant illustre comment créer une pyramide des âges pour chaque pays :

#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 population variable
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      M       A      11328
#2   2      M       A       8387
#3   3      M       A       7427
#4   4      M       A       7271
#5   5      M       A       4923
#6   6      M       A       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") + 
  coord_flip() +
  facet_wrap(~ country) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) #rotate x-axis labels

Modifier le thème

Enfin, nous pouvons modifier le thème des graphiques. Par exemple, le code suivant utilise theme_classic() pour donner aux graphiques un aspect plus minimaliste :

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") + 
  coord_flip() +
  facet_wrap(~ country) +
  theme_classic() + 
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Ou vous pouvez utiliser des ggthemes personnalisés. Pour une liste complète des ggthemes, consultez la page de documentation .

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *