使用R + ggplot在一个图中绘制来自不同csv文件的数据

时间:2018-05-10 10:35:39

标签: r plot ggplot2 graph

我有多个.csv文件,每个文件都有一个我希望彼此比较的列(称为:Data)。但首先,我必须将值分组到每个文件的列中。最后我想要多个彩色"线"在一个图表中使用每个组的平均值。我将描述我用于获取下面想要的图表的过程。这适用于单个文件,但我不知道如何添加多个"行"使用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")
 )

结果如下图所示:

enter image description here

2 个答案:

答案 0 :(得分:2)

我假设您有.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。然后,为data.frame中的每个list分配一个组。 我在round处使用了k=1,这意味着它会转到一个小数点(我认为这就是你在做什么)。
然后,还为每个data.frame分配一个唯一编号(在本例中只是列表的索引)。之后,listdata.frame合并为一个rbind,然后将数据编号转换为factor(更适合绘图)。最后,我将DataNumber作为一组和颜色变量添加到绘图中。

答案 1 :(得分:0)

您可以再次使用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