gpt4 book ai didi

r - 将 purrr 和 ggplot 与 group_by 和 Nest() 结合使用时获取绘图标题

转载 作者:行者123 更新时间:2023-12-02 06:04:39 25 4
gpt4 key购买 nike

我有以下示例:

df <- mtcars


plot <- df %>%
mutate(carb=as.character(carb)) %>%
group_by(carb) %>%
nest() %>%
mutate(plot=map(data, function(.x){ .x %>%
ggplot() +
geom_bar(aes(mpg))
}))

print(plot)

# A tibble: 6 x 3
carb data plot
<chr> <list> <list>
1 4 <tibble [10 x 10]> <S3: gg>
2 1 <tibble [7 x 10]> <S3: gg>
3 2 <tibble [10 x 10]> <S3: gg>
4 3 <tibble [3 x 10]> <S3: gg>
5 6 <tibble [1 x 10]> <S3: gg>
6 8 <tibble [1 x 10]> <S3: gg>

for (i in 1:4){
print(plots$plot[[i]])
}

问题:1)如何避免for循环并使用map函数来打印绘图?2)如何为图添加标题。

最佳答案

制作 ggplot 对象的数据框列有点不寻常且麻烦,但如果适合情况,它就可以工作。 (看起来geom_bar实际上对这个数据没有意义,所以我切换到过滤后的碳水化合物子集上的直方图)。

使用您的方法,您可以创建图列,将数据框保存到变量中,然后在图列表列和 carb 向量上使用 map2 s,为每个图添加标题。然后,您可以打印结果列表中的任何项目,或使用 mapwalk 打印所有项目。

library(tidyverse)

df <- mtcars %>%
filter(carb %in% c(1, 2, 4)) %>%
mutate(carb = as.character(carb))

df_with_plots <- df %>%
group_by(carb) %>%
nest() %>%
mutate(plot = map(data, function(.x) {
.x %>%
ggplot() +
geom_histogram(aes(mpg))
}))

plots1 <- map2(df_with_plots$plot, df_with_plots$carb, ~(.x + labs(title = .y)))

# plots1[[1]] # would print out first plot in the list

walk(plots1, print)

为了简洁起见,删除了额外的图

另一个选项似乎更简单,是将数据框拆分为数据框列表,然后根据需要为每个数据框创建绘图。

一些优点:调用 split 会将 carb 的每个值作为相应列表项的名称,您可以使用 imap 轻松访问该列表项>,并转移到 plots2 列表(请参阅下面我如何按名称打印绘图)。您也可以一步完成此操作。我也很难处理嵌套数据,因为我希望能够看到数据框,您可以通过打印数据框的拆分列表来做到这一点。

plots2 <- df %>%
split(.$carb) %>%
imap(function(carb_df, carb) {
ggplot(carb_df) +
geom_histogram(aes(mpg)) +
labs(title = carb)
})

plots2[["4"]]

与第一种方法一样,您可以使用 walk(plots2, print) 打印出所有绘图。

关于r - 将 purrr 和 ggplot 与 group_by 和 Nest() 结合使用时获取绘图标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54829796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com