データフレームのグループごとに1つの個別のプロットを作成し、グループをタイトルに含めたいと思います。
アイリスデータセットを使用して、ベースRとggplotでこれを行うことができます
plots1 <- lapply(split(iris, iris$Species),
function(x)
ggplot(x, aes(x=Petal.Width, y=Petal.Length)) +
geom_point() +
ggtitle(x$Species[1]))
Dplyrを使用して同等のものはありますか?
タイトルの代わりにファセットを使用する試みは次のとおりです。
p <- ggplot(data=iris, aes(x=Petal.Width, y=Petal.Length)) + geom_point()
plots2 = iris %>% group_by(Species) %>% do(plots = p %+% . + facet_wrap(~Species))
ここで、%+%を使用して、pのデータセットを各呼び出しのサブセットに置き換えます。
または(動作するが複雑)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()))
問題は、非常に単純な方法でggtitleを使用してグループごとのタイトルを設定できないように見えることです。
ありがとう!
使用する .$Species
を使用して、種データをggtitle
に取り込みます。
iris %>% group_by(Species) %>% do(plots=ggplot(data=.) +
aes(x=Petal.Width, y=Petal.Length) + geom_point() + ggtitle(unique(.$Species)))
dplyr 0.8.0
から、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]]
2019-02-18に reprexパッケージ (v0.2.0)によって作成されました。
これは、rowwise
を使用する別のオプションです。
plots2 = iris %>%
group_by(Species) %>%
do(plots = p %+% .) %>%
rowwise() %>%
do(x=.$plots + ggtitle(.$Species))