【问题标题】:Plot data from different csv files in one graph using R + ggplot使用 R + ggplot 在一张图中绘制来自不同 csv 文件的数据
【发布时间】:2018-05-10 10:35:38
【问题描述】:

我有多个 .csv 文件,每个文件都有一个列(称为:数据),我想相互比较。但首先,我必须将每个文件的列中的值分组。最后,我希望在一个图中有多条彩色“线”,每组的平均值。我将在下面描述我用来获取我想要的图表的过程。这适用于单个文件,但我不知道如何使用 ggplot 在一个图中添加多个文件的多个“行”。

这是我目前得到的:

data = read.csv(file="my01data.csv",header=FALSE, sep=",")

单个 .csv 文件如下所示,但没有标题

 ID Data Range 
 1,63,5.01   
 2,61,5.02  
 3,65,5.00  
 4,62,4.99
 5,62,4.98  
 6,64,5.01  
 7,71,4.90  
 8,72,4.93  
 9,82,4.89  
10,82,4.80  
11,83,4.82  
10,85,4.79   
11,81,4.80 

获取数据后,我将其分组为以下几行:

data["Group"] <- NA
data[(data$Range>4.95), "Group"] <- 5.0
data[(data$Range>4.85 & data$Range<4.95), "Group"] <- 4.9
data[(data$Range>4.75 & data$Range<4.85), "Group"] <- 4.8

最终数据如下:

myTable <- "ID Data Range Group
        1     63   5.01   5.00
        2     61   5.02   5.00
        3     65   5.00   5.00
        4     62   4.99   5.00
        5     62   4.98   5.00
        6     64   5.01   5.00 
        7     71   4.90   4.90
        8     72   4.93   4.90
        9     72   4.89   4.90
       10     82   4.80   4.80
       11     83   4.82   4.80
       10     85   4.79   4.80
       11     81   4.80   4.80"
myData <- read.table(text=myTable, header = TRUE)

要绘制此数据框,我使用以下几行:

 ( pplot <- ggplot(data=myDAta, aes(x=myDAta$Group, y=myDAta$Data)) 
  + stat_summary(fun.y = mean, geom = "line", color='red') 
  + xlab("Group") 
  + ylab("Data")
 )

结果如下图:

【问题讨论】:

    标签: r plot ggplot2 graph


    【解决方案1】:

    我假设您将.csv 文件的名称存储在一个名为file_names 的向量中。然后你可以运行下面的代码并且应该为每个文件得到不同的行:

    library(ggplot2)
    data_list <- lapply(file_names, read.csv , header=FALSE, sep=",")
    
    data_list <- lapply(seq_along(data_list), function(i){
      df <- data_list[[i]]
      df$Group <- round(df$Range, 1)
      df$DataNumber <- i
      df
      })
    
    finalTable <- do.call(rbind, data_list)
    finalTable$DataNumber <- factor(finalTable$DataNumber)
    
    ggplot(finalTable, aes(x=Group, y=Data, group = DataNumber, color = DataNumber)) + 
      stat_summary(fun.y = mean, geom = "line") + 
      xlab("Group") + 
      ylab("Data")
    

    工作原理
    首先使用read.csv 将不同的数据集读入列表data_list。然后为list 中的每个data.frame 分配一个组。 我在这里使用了roundk=1,这意味着它会四舍五入到小数点后一位(我想这就是你正在做的事情)。
    然后还为每个data.frame 分配一个唯一编号(在本例中为列表的索引)。之后,listrbind 合并为一个data.frame,然后将DataNumber 转换为factor(更适合绘图)。最后,我将 DataNumber 作为组和颜色变量添加到图中。

    【讨论】:

    • 感谢您的快速响应。感谢您在解决方案下方的解释!遗憾的是,我没有将 .csv 文件存储在向量中。您能告诉我如何将它们保存在一起吗?
    • 您需要 csv 文件的名称 - 向量中的文件。例如:file_names &lt;- c("my01data.csv", "my02data.csv", "my03data.csv")
    • data_list &lt;- lapply(data_list, function(df) colnames(df) &lt;-c("ID", "Data", "Range")) 应该可以工作。另请参阅SO-answer,了解有关 lapply-family 的精彩介绍
    • 对不起,我的错!您必须添加您希望将 df 作为返回值,因此 data_list
    【解决方案2】:

    您可以再次使用stat_summary 来添加另一行;您可以将dataaes 参数定义到任何其他数据集:

    #some pseudo data for testing
    my_other_data <- myData 
    my_other_data$Data <- my_other_data$Data * 0.5 
    
    pplot <- ggplot(data=myData, aes(x=Group, y=Data)) + 
        stat_summary(fun.y = mean, geom = "line", color='red') +
        stat_summary(data=my_other_data, aes(x=Group, y=Data), 
               fun.y = mean, geom = "line", color='green') +
        xlab("Group") +
        ylab("Data")
    pplot
    

    【讨论】:

      【解决方案3】:

      为什么不创建一个分类列(“类”)

      myTable1$Class <- "table1"
      
      myTable1 
         "ID Data Range Group Class
          1     63   5.01   5.00    table1
          2     61   5.02   5.00    table1
          3     65   5.00   5.00    table1"
      
      myTable2$Class <- "table2"
      
      myTable2 
          "ID Data Range Group Class
          1     63   5.01   5.00    table2
          2     61   5.02   5.00    table2
          3     65   5.00   5.00    table2" 
      

      合并数据框

      dfBIND <- rbind(myTable1, MyTable2)
      

      这样您就可以使用分组或着色变量进行 ggplot

      pplot <- ggplot(data=dfBIND, aes(x= dfBIND$Group, y= dfBIND$Data, group=Class)) +
      stat_summary(fun.y = mean, geom = "line", color='red') +
      xlab("Group") +
      ylab("Data")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-05
        • 2017-11-01
        • 2019-08-31
        相关资源
        最近更新 更多