簡體   English   中英

使用R + ggplot在一張圖中繪制來自不同csv文件的數據

[英]Plot data from different csv files in one graph using R + ggplot

我有多個.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")
 )

結果是這樣的圖:

在此處輸入圖片說明

我假設您將.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被分配一個組。 我在這里使用k=1 round ,這意味着它round到小數點后一位(我認為這就是您的工作)。
然后,還會為每個data.frame分配一個唯一編號(在這種情況下,只是列表的索引)。 之后,該list通過rbind組合到一個data.frame ,然后將DataNumber轉換為一個factor (用於繪圖的外觀更漂亮)。 最后,我將DataNumber作為組和顏色變量添加到繪圖中。

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

為什么不創建分類列(“類”)

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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM