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 .