在循环中动态命名变量以创建30个ggplots

时间:2018-07-22 17:54:57

标签: r ggplot2

我有一个包含30列的数据框,我想基于这些列创建30个(gg)图。通过ggplot创建图时,必须创建一个变量,该图的所有信息都将添加到该变量中。

有没有办法在for循环中创建30个这样的变量名(这样我就不必在本地创建和存储它们了?

在先前的代码中,我重复了以下步骤30次:

在以前的代码中,我有以下内容:

a1 = ggplot(data = results_round_one,
            aes(results_round_one$`R-0,01`)) 
a1 = a1 + geom_histogram()
a1 = a1 + xlim(0.46, 0.55)
a1 = a1 + geom_vline(xintercept= mean(results_round_one$`R-0,01`),
                     col = 'blue')
a1 = a1 + geom_vline(xintercept = max(results_round_one$`R-0,01`),
                     col = 'red')
a1= a1 + labs(y = 'Frequency', 
              x= 'Validated accuracy', 
              title = 'Optimizer = RMSProp', 
              subtitle = 'Learning rate = 0.01')

但是,由于我只需要更改aes和标签,我想我也应该能够在for循环中完成此过程。

2 个答案:

答案 0 :(得分:1)

在缺少一些示例数据的情况下,以下代码将循环遍历<li class="site-nav__item current-menu-item"><a href="#" style="display:none"></a></li>列,从而创建密度图:

iris

使用您的代码,类似于:

library(purrr)
library(dplyr)

df <- iris %>%
  select(Sepal.Length:Petal.Width)

df %>% 
  map2(names(df), ~ .x %>% 
         as.data.frame %>% 
         set_names(.y) %>% 
         ggplot(aes_string(.y)) + geom_density() + ggtitle(.y))

答案 1 :(得分:0)

您可以应用直方图功能:

getImage <- function(col){
  a1 = ggplot(data = results_round_one,
              aes(results_round_one[, col])) +
  geom_histogram() + 
  xlim(0.46, 0.55) +
  geom_vline(xintercept= mean(results_round_one[, col]),
                       col = 'blue') +
  labs(y = 'Frequency', 
                x= 'Validated accuracy', 
                title = 'Optimizer = RMSProp', 
                subtitle = 'Learning rate = 0.01')
  return(a1)
}

迭代到列向量。在这种情况下, col_30 是列名的向量

# e.g. col_30 = c("col1", "col2") etc.
for(col in col_30){
  getImage(col)
}

这将生成不同的图。