【问题标题】:GGplot - Inputting a list of data framesGGplot - 输入数据框列表
【发布时间】:2021-07-20 16:07:23
【问题描述】:

我有一个数据框列表 df_list = (df1,df2,df3),所有数据框的维度相同,但列名不同。 我在 for 循环中调用 ggplot:

for(i in 1:3){
p = ggplot(df_list[[i]], aes(x=df_list[[i]][1], y=df_list[[i]][3], fill=df_list[[i]][2])) +
  geom_bar(stat='identity', position='dodge')
}

但是,R 不允许我这样做:我必须实际使用变量名,这意味着我不能使用循环。有什么解决办法吗?

这是示例数据:

df1<-data.frame(order=c(1:3,4:6), gender=c('f','f','f','m','m','m'), count= c(10,20,30,20,25,30))
 
 df2<-data.frame(order11=c(2:4,2:4), gender11=c('f','f','f','m','m','m'), count= c(11,21,30,21,25,30))
 
 df3<-data.frame(order22=c(1:3,4:6), gender22=c('f','f','f','m','m','m'), count= c(10,20,31,21,25,30))
 >  df1
  order gender count
1     1      f    10
2     2      f    20
3     3      f    30
4     4      m    20
5     5      m    25
6     6      m    30
> 

【问题讨论】:

    标签: r list ggplot2


    【解决方案1】:

    相同的逻辑但不同的方法:

    library(tidyverse)
    
    df_list = lst(df1,df2,df3) #This is not a typo!!
    
    imap(df_list, ~{
      col <- names(.x)
      ggplot(.x, aes(x=.data[[col[1]]], y=.data[[col[3]]], fill=.data[[col[2]]])) + 
        geom_col(position='dodge') + 
        ggtitle(paste0('Plot for ', .y))
    }) -> plot_list
    

    plot_list[[1]]

    plot_list[[2]]

    【讨论】:

      【解决方案2】:

      您的数据框中可能有不同的列名,但列的角色似乎是由它们在数据框中的索引定义的。例如,您希望 thr 数据框中的第一列在图中定义 x 值,依此类推。这意味着您可以使用names()aes_string() 来获得您想要的。

      首先定义一些测试数据,因为你没有给我们任何。

      library(tidyverse)
      
      df1 <- tibble(x1=rnorm(10), y1=rnorm(10), z1=rep(c("A", "B"), each=5))
      df2 <- tibble(x2=rnorm(10), y2=rnorm(10), z2=rep(c("A", "B"), each=5))
      df3 <- tibble(x3=rnorm(10), y3=rnorm(10), z3=rep(c("A", "B"), each=5))
      dfList <- list(df1, df2, df3)
      

      现在解决问题

      lapply(
        dfList,
        function(df) {
          names <- names(df)
          df %>% ggplot(aes_string(x=names[1], y=names[2], colour=names[3])) + geom_point()
        }
      )
      

      给予

      我使用了geom_point()colour 而不是geom_bar()fill,但同样的原则也适用。

      【讨论】:

      • 我现在添加了示例数据。我要试试这个,但不确定它是否适用于我正在处理的条形图。
      • 好吧,那么您最好阅读this post 了解如何创建 MWE,显示您想要的输出,并希望比我有更好的心灵感应能力的其他人会帮助您。
      • 谢谢,这节省了很多劳动力!
      猜你喜欢
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2019-10-17
      • 2018-03-27
      • 2021-11-21
      • 2020-01-02
      相关资源
      最近更新 更多