Je souhaite créer un tracé distinct par groupe dans un bloc de données et inclure le groupe dans le titre.
Avec le jeu de données iris, je peux le faire en base R et ggplot
plots1 <- lapply(split(iris, iris$Species),
function(x)
ggplot(x, aes(x=Petal.Width, y=Petal.Length)) +
geom_point() +
ggtitle(x$Species[1]))
Existe-t-il un équivalent utilisant dplyr?
Voici une tentative d'utilisation de facettes au lieu de titre.
p <- ggplot(data=iris, aes(x=Petal.Width, y=Petal.Length)) + geom_point()
plots2 = iris %>% group_by(Species) %>% do(plots = p %+% . + facet_wrap(~Species))
où j'utilise% +% pour remplacer l'ensemble de données de p par le sous-ensemble de chaque appel.
ou (travail mais complexe) avec ggtitle
plots3 = iris %>%
group_by(Species) %>%
do(
plots = ggplot(data=.) +
geom_point(aes(x=Petal.Width, y=Petal.Length)) +
ggtitle(. %>% select(Species) %>% mutate(Species=as.character(Species)) %>% head(1) %>% as.character()))
Le problème est que je n'arrive pas à définir le titre par groupe avec ggtitle de manière très simple.
Merci!
Utilisez .$Species
pour extraire les données sur les espèces dans ggtitle
:
iris %>% group_by(Species) %>% do(plots=ggplot(data=.) +
aes(x=Petal.Width, y=Petal.Length) + geom_point() + ggtitle(unique(.$Species)))
Ceci est une autre option utilisant rowwise
:
plots2 = iris %>%
group_by(Species) %>%
do(plots = p %+% .) %>%
rowwise() %>%
do(x=.$plots + ggtitle(.$Species))
À partir de dplyr 0.8.0
, nous pouvons utiliser group_map
:
library(dplyr, warn.conflicts = FALSE, quietly = TRUE)
#> Warning: le package 'dplyr' a été compilé avec la version R 3.5.2
library(ggplot2)
plots3 <- iris %>%
group_by(Species) %>%
group_map(~tibble(plots=list(
ggplot(.) + aes(x=Petal.Width, y=Petal.Length) + geom_point() + ggtitle(.y[[1]]))))
plots3
#> # A tibble: 3 x 2
#> # Groups: Species [3]
#> Species plots
#> <fct> <list>
#> 1 setosa <S3: gg>
#> 2 versicolor <S3: gg>
#> 3 virginica <S3: gg>
plots3$plots[[2]]
Créé le 2019-02-18 par le paquet reprex (v0.2.0).