ggplot总和和变量的平均值

时间:2013-12-18 20:35:18

标签: r ggplot2 lapply

我正在尝试创建两个图形,其中两个的x轴都是文件名(请参阅下面的数据组织的小例子)。

对于单个文件名,将会出现多次特定的门 - 每个门都有不同的M1值。

    Phylum      M1   Filename
Acidobacteria 55.75 4461130.3
Acidobacteria 57.08 4461130.3
Acidobacteria 54.61 4461125.3
Acidobacteria 53.49 4461145.3
Acidobacteria 57.99 4461145.3
Acidobacteria 53.05 4461161.3
Acidobacteria 51.03 4461161.3
Acidobacteria 50.20 4461227.3
Acidobacteria 51.88 4461227.3

图1:x轴是文件名实例。 y轴是每个文件名出现每个门的次数(例如,对于文件名4461145.3,w / Acidobacteria = 2)。

图2:x轴是文件名实例。 y轴是每个文件名发生的每个门的M1的平均值(例如w / Acidobacteria(n = 2),文件名4461145.3的mean_M1 = 55.74)。

图表上的点应该用Phylum着色,并且对于每个文件名,每个门的总和和平均值应该在垂直线上。对于给出的示例,只有一个Phylum名称使得请求有点微不足道,但我的数据集中有超过30个唯一的Phylum。

我可以通过文件名绘制每个门的原始M1值(它也正确地着色),但是我无法弄清楚获得总和和M1的平均值的命名法。我试图使用lapply,但我无法弄清楚如何将它与ggplot结合使用。

FN = env.txt
myDF = read.csv(FN, header=TRUE, sep=' ')

f <- qplot(Filename, M1, data=myDF)
f + geom_point(aes(colour=factor(Phylum))) + theme(axis.text.x=element_text(angle=90, hjust=1))

e <- qplot(Filename, mean(M1), data=myDF)
e + geom_point(aes(colour=factor(Phylum))) + theme(axis.text.x=element_text(angle=90, hjust=1))

g <- ggplot(myDF, aes(Filename, M1))
g + geom_point(aes(colour=factor(Phylum))) + theme(axis.text.x=element_text(angle=90, hjust=1))

p <- ggplot(myDF, aes(Filename, mean(M1)))
p + geom_point() + facet_grid(. ~ Phylum) + theme(axis.text.x=element_text(angle=90, hjust=1))

q <- qplot(Filename, M1, data=myDF, fun.y='mean')
q + geom_point() + facet_grid(. ~ Phylum) + theme(axis.text.x=element_text(angle=90, hjust=1))

尝试的图像可以在这里看到:http://imgur.com/srmR1rO第一个是大致正确的想法,但不是拥有M1的所有值,我想要的意思。我没有尝试求和问题。

非常感谢。

1 个答案:

答案 0 :(得分:3)

为什么不使用myDF.agg创建一个名为plyr的M1均值和总和的数据框?

library(plyr)
FN = env.txt
myDF = read.csv(FN, header=TRUE, sep=' ')
myDF.agg = ddply(myDF, .(Filename, Phylum), summarize, mean_M1 = mean(M1), sum_M1 = sum(M1))
e.mean <- qplot(Filename, mean_M1, data=myDF.agg)
e.mean + geom_point(aes(colour=factor(Phylum))) + theme(axis.text.x=element_text(angle=90,     hjust=1))

e.sum <- qplot(Filename, sum_M1, data=myDF.agg)
e.sum + geom_point(aes(colour=factor(Phylum))) + theme(axis.text.x=element_text(angle=90,     hjust=1))