1
votes

Comment créer des graphiques à barres combinés en itérant à travers des variables factorielles?

Je trouve mon code inefficace et je souhaite le rendre plus rapide en itérant à travers les variables de facteur dans l'ensemble de données et en utilisant plot_grid () pour combiner ces graphiques ensemble. Mais je ne sais pas comment.

Voici le code répétitif que j'écris beaucoup de fois.

`3` <- customer_personal_profiles %>% 
  ggplot(aes(Education)) +
  geom_bar() +
  coord_flip() +
  theme_bw()

`2` <-customer_personal_profiles %>% 
  ggplot(aes(EmploymentStatus)) +
  geom_bar() +
  coord_flip() +
  theme_bw()

`1` <- customer_personal_profiles %>% 
  ggplot(aes(Gender)) +
  geom_bar() +
  coord_flip() +
  theme_bw()

cowplot::plot_grid(`1`, `2`, `3`)

Le code a produit ce graphique:

entrez la description de l'image ici

J'ai trouvé le code assez long et répétitif. Y a-t-il un moyen de le faire en plusieurs lignes de code?

Merci!


2 commentaires

À quoi ressemble l'ensemble de données customer_personal_profiles ?


@Tam HN: essayez ceci stackoverflow.com/a/55524126/786542


3 Réponses :


0
votes

Utilisation des données mtcars pour rendre cela reproductible:

g = ggplot(mtcars) +
  geom_bar() +
  coord_flip() +
  theme_bw()

a = g + aes(cyl)  
b = g + aes(mpg)   
cowplot::plot_grid(a,b)

entrez la description de l'image ici


0 commentaires

1
votes

Nous pourrions obtenir toutes les variables à tracer dans une variable et les parcourir en boucle en utilisant lapply / map , convertir les caractères en symbole et évaluez-les et stockez les graphiques dans une liste. Nous pouvons maintenant utiliser cette liste pour tracer en utilisant plot_grid . Utilisation d'un exemple reproductible de mtcars.

vals <- c("Gender", "EmploymentStatus", "Education")
group_plot <- lapply(vals, function(x) ggplot(customer_personal_profiles, 
                                       aes(!!rlang::sym(x))) +
                                       geom_bar() +
                                       coord_flip() +
                                       theme_bw())

cowplot::plot_grid(plotlist = group_plot)

 entrez la description de l'image ici


Donc pour votre cas , vous pouvez faire

vals <- c("carb", "gear", "cyl")
library(ggplot2)

group_plot <- lapply(vals, function(x) ggplot(mtcars, aes(!!rlang::sym(x))) +
                                       geom_bar() +
                                       coord_flip() +
                                       theme_bw())

cowplot::plot_grid(plotlist = group_plot)


0 commentaires

0
votes

Merci à tous. J'ai également réalisé que je pouvais utiliser rassembler pour raccourcir le code:

customer_profiles_baked %>%
  select_if(is.factor) %>% 
  gather(x, y, Education:Location.Code) %>% 
  count(x, y) %>% 
  ggplot(aes(x = y, y = n)) +
  facet_wrap(~ x, ncol = 2, nrow = 3, scales = "free") +
  geom_segment( aes(xend=y, yend=0 )) +
  geom_point( size=2, color="chocolate4", alpha = 0.6)  +
  coord_flip() +
  theme_bw() +
  ylab("Count") +
  xlab("Personal Profile Variables")

Cela donne:

 entrez la description de l'image ici


0 commentaires