![](/img/trans.png)
[英]R ggplot Plot from data in one data frame, label axis ticks using data frame a different data frame?
[英]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
添加另一行; 您可以為任何其他數據集定義data
和aes
參數:
#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.