2013-12-18 25 views
1

我想创建两个图表,其中x轴的两个将是文件名(请参阅下面的数据组织的小例子)。ggplot总和和变量的手段

对于单个文件名,会有多次出现的特定门 - 每个门都有不同的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轴是Filename实例。 y轴是每个文件名每个门出现的次数(例如,对于文件名4461145.3 w/Acidobacteria = 2)。

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

图表上的点应该被系门打上颜色,并且对于每个文件名,每个门的总和和平均值应该在垂直线上。在给出的例子中,只有一个明系名称使得请求有点微不足道,但是我的数据集中有超过30个独特的系统。

我可以通过文件名绘制每个门的原始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的所有值,我想的平均值。我没有试图总结问题。

协助非常感谢。

回答

3

为什么不创建一个数据框与M1的手段和总和,称为myDF.agg,使用plyr

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)) 
+0

完美@ user2840385,谢谢。 – cer