Pyramide des âges centrée

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Kévin Dubois
Messages : 97
Enregistré le : 25 Mar 2019, 12:07

Pyramide des âges centrée

Messagepar Kévin Dubois » 20 Sep 2020, 11:00

Bonjour,

Après quelques recherches, j'ai réussi à trouver un code qui me permet de créer une pyramide des âges :

Code : Tout sélectionner

library(tidyverse)
library(truncnorm)
library(ggplot2)

#Création du dataframe
data = data.frame(sexe = c("homme", "homme", "homme", "homme", "homme", "homme", "femme", "femme", "femme", "femme", "femme", "femme"), cat_age = c("18-25", "26-35", '36-45', '46-55', '56-65', '65+', "18-25", "26-35", '36-45', '46-55', '56-65', '65+'), frequence = rtruncnorm(n = 12, a = 1, b = 50, mean = 25, sd = 12))

#Création d'un taux par sexe
data = data %>% group_by(sexe) %>% mutate(taux = frequence / sum(frequence) * 100)

#Création d'un indice de direction, pour la construction du graphique
data$direction = case_when(data$sexe == 'homme' ~ 1, TRUE ~ -1)

#Graphique
ggplot(data, aes(x = cat_age, y = taux * direction, fill = sexe)) + geom_bar(stat = "identity",width = 0.6, col = "black") + geom_hline(yintercept = 0) + coord_flip() + labs(x = "Age", y = "Proportion (%)", fill = "Sex") + scale_fill_discrete(drop = FALSE) + scale_y_continuous(labels = function(x){paste0(abs(x))}) + theme(text = element_text(size = 20), legend.title = element_blank())


Malheureusement, l'échelle est différente pour les deux sexes. Le score monte jusqu'à 30% pour les hommes, contre 20% pour les femmes :
https://zupimages.net/viewer.php?id=20/38/f32u.png

Comment pourrais-je centrer la légende, afin de ne pas avoir de décalage ?

Merci.

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Pyramide des âges centrée

Messagepar Mickael Canouil » 20 Sep 2020, 13:11

Bonjour,

un petit effort de consultation de la documentation de ggplot2 et notamment de la structure d'un ggplot2 vous permettrez de trouver seul la solution qui est très basique.

https://ggplot2.tidyverse.org/reference ... te-systems
https://ggplot2.tidyverse.org/reference ... ion-scales

edit :

Code : Tout sélectionner

<- ggplot(data, aes(= cat_age, x = taux * direction, fill = sexe)) +
  geom_bar(stat = "identity", width = 0.6, col = "black", orientation = "y") +
  geom_vline(xintercept = 0) +
  labs(= "Age", x = "Proportion (%)", fill = "Sex") +
  scale_fill_discrete(drop = FALSE) +
  scale_x_continuous(labels = abs) +
  theme(text = element_text(size = 20), legend.title = element_blank())

En changeant les limites des données :

Code : Tout sélectionner

+ scale_x_continuous(labels = abs, limits = max(data[["taux"]]) * c(-1, 1))
+ xlim(max(data[["taux"]]) * c(-1, 1))
+ lims(= max(data[["taux"]]) * c(-1, 1))

En changeant les coordonnées du graphique :

Code : Tout sélectionner

+ coord_cartesian(= max(data[["taux"]]) * c(-1, 1))


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité