r - 如何以编程方式生成 70 多个变量的 ggplot?

标签 r ggplot2 purrr

我有一个包含约 70 个变量的数据框(每个变量都是一个问题),我想使用相同的自定义主题为所有变量创建绘图。我认为这可以用 purrr() 实现,但我还没有弄清楚那个傻瓜。

本质上,我想通过以下代码运行每个变量(例如,i 到 N):

  ggplot(aes(fct_rev(fct_infreq(`var_i`)))) +
  geom_bar(stat = "count") +
  labs(subtitle = `var_i`) +
  coord_flip() + 
  theme(...) +
  ggsave("var_i.svg", device = "svg")

我希望为每个变量获取一个 svg,使用变量名称填充图表中的文件名和副标题。

这是一个等效的 dput():

structure(list(Species_L = c("setosa5.1", "setosa4.9", "setosa4.7", 
"setosa4.6", "setosa5", "setosa5.4", "setosa4.6", "setosa5", 
"setosa4.4", "setosa4.9", "setosa5.4", "setosa4.8", "setosa4.8", 
"setosa4.3", "setosa5.8", "setosa5.7", "setosa5.4", "setosa5.1", 
"setosa5.7", "setosa5.1"), Species_W = c("setosa3.5", "setosa3", 
"setosa3.2", "setosa3.1", "setosa3.6", "setosa3.9", "setosa3.4", 
"setosa3.4", "setosa2.9", "setosa3.1", "setosa3.7", "setosa3.4", 
"setosa3", "setosa3", "setosa4", "setosa4.4", "setosa3.9", "setosa3.5", 
"setosa3.8", "setosa3.8"), Species_PL = c("setosa1.4", "setosa1.4", 
"setosa1.3", "setosa1.5", "setosa1.4", "setosa1.7", "setosa1.4", 
"setosa1.5", "setosa1.4", "setosa1.5", "setosa1.5", "setosa1.6", 
"setosa1.4", "setosa1.1", "setosa1.2", "setosa1.5", "setosa1.3", 
"setosa1.4", "setosa1.7", "setosa1.5"), Species_PW = c("setosa0.2", 
"setosa0.2", "setosa0.2", "setosa0.2", "setosa0.2", "setosa0.4", 
"setosa0.3", "setosa0.2", "setosa0.2", "setosa0.1", "setosa0.2", 
"setosa0.2", "setosa0.1", "setosa0.1", "setosa0.2", "setosa0.4", 
"setosa0.4", "setosa0.3", "setosa0.3", "setosa0.3")), class = "data.frame", row.names = c(NA, 
-20L)) 

最佳答案

您可以循环遍历列名称。这样,您就可以将列名作为字符串,这使得它可以轻松地在文件名和标签中使用,但是您必须进行一些转换才能让 aes() 理解它:

for (var_name in colnames(df)) {
    p = ggplot(df, aes(fct_rev(fct_infreq(!! sym(var_name))))) +
        geom_bar(stat = "count") +
        labs(subtitle = var_name) +
        coord_flip()
    # Need to explicitly print the plot in the loop for it to
    #   show up
    print(p)
    ggsave(paste0(var_name, ".svg"))
}

关于r - 如何以编程方式生成 70 多个变量的 ggplot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57403546/

相关文章:

r - 使用ggplot在一个堆叠条形图中的多个色阶

r - 基于多列进行拆分,然后在 R 中应用 spread()

r - lapply over lapply(或其他清理时间序列数据的方式)

r - 小鼠 : partial imputation using where argument failing

r - 为什么将 emmeans 与 data.frame 形成对比而不报告正确的 p 值?

r - 使用 gganimate 动画 geom_bar 的问题

r - 在给定一个条件的情况下更改多列中的值(最好在 dplyr 中)

r - 强制单独 y 轴限制

r - 代码无法使用 R 中 purrr 包中的 map 工作

r - 在 R 中按列在两个数据帧之间应用函数(ks.test)