我有多个.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")
)
结果如下图所示:
答案 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
分配一个唯一编号(在本例中只是列表的索引)。之后,list
与data.frame
合并为一个rbind
,然后将数据编号转换为factor
(更适合绘图)。最后,我将DataNumber作为一组和颜色变量添加到绘图中。
答案 1 :(得分:0)
您可以再次使用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