【发布时间】:2019-08-12 14:54:11
【问题描述】:
我有一个包含多个数据列表的嵌套列表。我可以在自己的图形上绘制每个数据源,但我一直试图在单个图形中从每个数据源中获得一条相互叠加的平滑线。这是使用 mtcars 数据集的代码示例。
library(dplyr)
library(tidyr)
library(purrr)
library(ggplot2)
by_cyl <- mtcars %>%
group_by(cyl, gear) %>%
nest() %>%
rename(cyl_data = data)
by_gear <- mtcars %>%
group_by(gear) %>%
nest() %>%
rename(gear_data = data
mtcars_nest <- left_join(by_cyl, by_gear, by = "gear")
mtcars_nest <- mtcars_nest %>%
mutate(
map(cyl_data, ~ ggplot(., aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(se = TRUE, color = 'blue')
)
) %>%
rename(plot_cyl = `map(...)`)
mtcars_nest <- mtcars_nest %>%
mutate(
map(gear_data, ~ ggplot(., aes(x = wt, y = mpg)) +
geom_point() +
geom_smooth(se = TRUE, color = 'red')
)
) %>%
rename(plot_gear = `map(...)`)
mtcars_nest$plot_cyl[1]
mtcars_nest$plot_gear[1]
#How to get these two plots on one figure?
关于如何在单个图形上获得 mtcars$plot_cyl 和 mtcars$plot_gear 有什么想法吗?我真正需要的是在 mtcars_nest tibble 中添加另一个 gg 列表,以便在 mtcars_nest 中得到一个类似 cyl、gear、cyl_data、gear_data、plot_cyl、plot_gear 和 plot_cyl_gear 的结构。
> mtcars_nest
# A tibble: 8 x 6
cyl gear cyl_data gear_data plot_cyl plot_gear
<dbl> <dbl> <list> <list> <list> <list>
1 6 4 <tibble [4 × 9]> <tibble [12 × 10]> <S3: gg> <S3: gg>
2 4 4 <tibble [8 × 9]> <tibble [12 × 10]> <S3: gg> <S3: gg>
3 6 3 <tibble [2 × 9]> <tibble [15 × 10]> <S3: gg> <S3: gg>
4 8 3 <tibble [12 × 9]> <tibble [15 × 10]> <S3: gg> <S3: gg>
5 4 3 <tibble [1 × 9]> <tibble [15 × 10]> <S3: gg> <S3: gg>
6 4 5 <tibble [2 × 9]> <tibble [5 × 10]> <S3: gg> <S3: gg>
7 8 5 <tibble [2 × 9]> <tibble [5 × 10]> <S3: gg> <S3: gg>
8 6 5 <tibble [1 × 9]> <tibble [5 × 10]> <S3: gg> <S3: gg>
我已尝试添加:
mtcars_nest <- mtcars_nest %>%
mutate(
map(cyl_data, ~ ggplot(., aes(x = wt, y = mpg)) +
# geom_point() +
geom_smooth(se = TRUE, color = 'blue'),
gear_data, ~ ggplot(., aes(x = wt, y = mpg)) +
# geom_point() +
geom_smooth(se = TRUE, color = 'red')
)
) %>%
rename(plot_cyl_gear = `map(...)`)
但它似乎只绘制了蓝色的 cyl_data(地图函数中的第一个数据源。
【问题讨论】: