使用 purrr 在 ggplot2 objects 列表中绘制平均线
Using purrr to plot a mean line on a list of ggplot2 objects
我正在玩 purrr
并且方法概述在这个 post
我的目标是使用purrr::map2
(或某些变体)按组(cyl)应用一个函数(在本例中是指),然后创建一些使用先前应用的结果的图结果图中的一个函数。或者,换句话说,我想使用 dplyr
链中的 mean_list
列表列为每个图中的平均值添加一条垂直线。这可能吗?
library(tidyverse)
mt_list <- mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(mean_list = map2(data, cyl, ~mean(.$disp))) %>%
mutate(plot = map2(data, cyl, ~ggplot(data = .x) +
geom_point(aes(y = drat, x = disp)) #+
#geom_vline(data = mean_list ,aes(xintercept) Unsure about this step
))
这是我想要的一种情节的示例,但是当重点是将所有内容都包含在像 mt_list
[=19 这样的漂亮小标题中时,这似乎是一种愚蠢的方法=]
mt_list$plot[[1]] +
geom_vline(aes(xintercept = mt_list$mean_list[[1]]))
这可以通过将 mean_list
作为第二个参数传递给 map2
而不是 cyl
,然后在 geom_vline
中使用 xintercept = .y
来完成。
mt_list <- mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(mean_list = map(data, ~mean(.$disp))) %>%
mutate(plot = map2(data, mean_list, ~ ggplot(data = .x) +
geom_point(aes(y = drat, x = disp)) +
geom_vline(xintercept = .y)
))
请注意,对于此特定用例,您还可以通过使用 aes(xintercept = mean(disp))
:
完全避免必须创建 mean_list
mt_list <- mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(plot = map(data, ~ ggplot(data = .) +
geom_point(aes(y = drat, x = disp)) +
geom_vline(aes(xintercept = mean(disp)))))
我正在玩 purrr
并且方法概述在这个 post
我的目标是使用purrr::map2
(或某些变体)按组(cyl)应用一个函数(在本例中是指),然后创建一些使用先前应用的结果的图结果图中的一个函数。或者,换句话说,我想使用 dplyr
链中的 mean_list
列表列为每个图中的平均值添加一条垂直线。这可能吗?
library(tidyverse)
mt_list <- mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(mean_list = map2(data, cyl, ~mean(.$disp))) %>%
mutate(plot = map2(data, cyl, ~ggplot(data = .x) +
geom_point(aes(y = drat, x = disp)) #+
#geom_vline(data = mean_list ,aes(xintercept) Unsure about this step
))
这是我想要的一种情节的示例,但是当重点是将所有内容都包含在像 mt_list
[=19 这样的漂亮小标题中时,这似乎是一种愚蠢的方法=]
mt_list$plot[[1]] +
geom_vline(aes(xintercept = mt_list$mean_list[[1]]))
这可以通过将 mean_list
作为第二个参数传递给 map2
而不是 cyl
,然后在 geom_vline
中使用 xintercept = .y
来完成。
mt_list <- mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(mean_list = map(data, ~mean(.$disp))) %>%
mutate(plot = map2(data, mean_list, ~ ggplot(data = .x) +
geom_point(aes(y = drat, x = disp)) +
geom_vline(xintercept = .y)
))
请注意,对于此特定用例,您还可以通过使用 aes(xintercept = mean(disp))
:
mean_list
mt_list <- mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(plot = map(data, ~ ggplot(data = .) +
geom_point(aes(y = drat, x = disp)) +
geom_vline(aes(xintercept = mean(disp)))))