我有二维数据(2次处理x 3天),目标是绘制折线图,以2条线表示均值和误差线。但是,当我使用“绘图”绘制均值时,结果是3×3平方的图形(不知道它是什么)。
数据:
no. ,Treatment, D1, D2, D3
1, A , 4 , 5 , 5
2, A , 6 , 6 , 4
3, A , 5 , 7 , 8
4, B , 2 , 1 , 3
5, B , 3 , 2 , 2
6, B , 3 , 2 , 3
我使用aggregate
来计算平均值和标准误差。但是,当我使用plot
时,结果很奇怪。
dta=read.table(file ='dta.csv', header = T, sep = ',')
dta.mean=aggregate(dta[,-1:-2], list(dta$Treatment),mean)
plot(dta.mean[1,2:4])
我期望线图由2条线组成(一条是处理A,另一条是处理B),y值是带有误差线的均值。 请帮助我:(非常感谢!
image1:这是错误的结果
image2:预期的一个
答案 0 :(得分:0)
让我们逐步进行此操作。希望对您有帮助。
首先,让我们看一下aggregate
方法的结果:
Group.1 D1 D2 D3
1 A 5.000000 6.000000 5.666667
2 B 2.666667 1.666667 2.666667
然后,您对plot
的调用包括dta.mean[1,2:4]
,因此将选择第1行和第2至4列进行绘制(作为数据框):
D1 D2 D3
1 5 6 5.666667
请注意,这仅包括组“ A”(第1行)和3个数字变量(对于D1,D2和D3)。
在数据帧上调用plot
时,您将获得问题中提供的散点图矩阵。这显示了6个散点图(D1对D2,D2对D1,D1对D3,D3对D1,D2对D3,D3对D2)。这6个地块中的每一个都只有一个点。例如,D1对D2为D1 = 5,D2 = 6。
这是我要采用的方法:
首先,我将melt
数据(reshape2
包):
library(reshape2)
dta.m <- melt(dta[-1], id = "Treatment")
Treatment variable value
1 A D1 4
2 A D1 6
3 A D1 5
4 B D1 2
5 B D1 3
6 B D1 3
7 A D2 5
8 A D2 6
...
这会将您的数据以长格式(而不是宽格式)放置:variable
现在是D1,D2或D3,并且value
包括这些变量的值。这对ggplot
很有帮助和整洁。
接下来,我会aggregate
:
dta.mean = aggregate(value~Treatment+variable, dta.m, mean)
哪个应该给您绘图?
Treatment variable value
1 A D1 5.000000
2 B D1 2.666667
3 A D2 6.000000
4 B D2 1.666667
5 A D3 5.666667
6 B D3 2.666667
使用ggplot2
:
library(ggplot2)
ggplot(dta.mean, aes(x = variable, y = value, group = Treatment, col = Treatment)) +
geom_line()
要制作错误栏,您将需要再次聚合数据(与进行均值操作相似),并可能使用geom_errorbar
。
我希望这对您有所帮助。