“聚合”后如何绘制(带误差线)?

时间:2019-09-22 06:28:53

标签: r

我有二维数据(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:这是错误的结果 image1: this is the wrong result

image2:预期的一个 image2: the expected one

1 个答案:

答案 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()

plot of melted mean data

要制作错误栏,您将需要再次聚合数据(与进行均值操作相似),并可能使用geom_errorbar

我希望这对您有所帮助。