首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用行和rlang创建数据集的所有可能的geom_col图表

使用行和rlang创建数据集的所有可能的geom_col图表
EN

Stack Overflow用户
提问于 2021-01-06 20:49:15
回答 1查看 37关注 0票数 0

我想要创建和保存数据集的所有可能的geom_col图表,其中包含Y轴上的分类变量和x轴上数值变量的平均值(分组变量为y)。

我从链接中学习了一些想法,并创建了下面的代码,但是很难让它正常工作。请给我建议。

代码语言:javascript
复制
library(tidyverse)
library(skimr)

cat_vars <- skim(mpg) %>% as.data.frame() %>% filter(skim_type == "character", character.n_unique <= 16) %>% pull(skim_variable) 

num_vars <- skim(mpg) %>% as.data.frame() %>% filter(skim_type == "numeric") %>% pull(skim_variable)

vars <- cross_df(list(y= cat_vars, x = num_vars))

plots <- bind_rows(rep(list(mpg), nrow(vars)), .id = "grp") %>%
  nest_by(grp) %>%
  bind_cols(vars) %>%
  rowwise() %>% 
  mutate(plot = list(~(data %>%
                         group_by(y) %>%
                         summarise("{x}" = mean(.data[[x]], na.rm = T)) %>%
                         ungroup()) %>%
                       ggplot() +
                       geom_col(aes(x = .data[[x]],
                                    y = fct_reorder(.data[[y]], .data[[x]], .fun = sum, na.rm = T),
                                    fill = .data[[y]]), width = 0.8) +
                       xlab(paste0("Avg. ", x)) +
                       ylab(y) +
                       theme_classic()))),
filename = paste0(x, "_by_", y, ".pdf")) %>%
  select(filename, plot)

pwalk(plots, ggsave, path =  getwd())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-06 21:51:08

不需要bind_rownest,.相反:

  1. 将绘图代码放入辅助函数中,而不是将所有内容包装在管道中。这使得调试更加容易,代码也更加清晰。
  2. 使用map2循环df vars的列
  3. 代码的一个问题是summarise("{x}" = mean(.data[[x]], na.rm = T)),它将创建一个名为{x}的变量。相反,如果!!sym(x) := ...是字符串,则使用例如x将值赋值给x
代码语言:javascript
复制
library(tidyverse)
library(skimr)

cat_vars <- skim(mpg) %>% as.data.frame() %>% filter(skim_type == "character", character.n_unique <= 16) %>% pull(skim_variable) 

num_vars <- skim(mpg) %>% as.data.frame() %>% filter(skim_type == "numeric") %>% pull(skim_variable)

vars <- cross_df(list(y= cat_vars, x = num_vars))

make_plot <- function(data, x, y) {
  data <- data %>%
    group_by(across(all_of(y))) %>%
    summarise(!!sym(x) := mean(.data[[x]], na.rm = T), .groups = "drop") %>%
    ungroup()
  
  ggplot(data) +
    geom_col(aes(x = .data[[x]],
                 y = fct_reorder(.data[[y]], .data[[x]], .fun = sum, na.rm = T),
                 fill = .data[[y]]), width = 0.8) +
    xlab(paste0("Avg. ", x)) +
    ylab(y) +
    theme_classic()
}

plots <- map2(vars$x, vars$y, make_plot, data = mpg)

length(plots)
#> [1] 25

plots[[1]]

# Export

pwalk(list(x = vars$x, y = vars$y, p = plots), function(x, y, p) ggsave(filename = paste0(x, "_by_", y, ".pdf"), plot = p, path =  getwd()))

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65603186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档