2015-12-09 19 views
0

我正在尝试使用geom_text为我使用lapplysplit函数生成的一系列ggplots添加选择文本。基本上我创建一个ggplot每Component.name.x与每个这些情节包含3条曲线 - 每个group.name一个。子集或Grep用于在R中选择性粘贴使用Geom_Text

所以作为什么我的数据帧(working2.df)一种看起来像一个缩短的例子:

group.name Component.name.x   TCAmount Ratio Slope Intercept 
1A-Alprazolam   Alprazolam   0.0  0.05 0.5  0.4 
1A-Alprazolam   Alprazolam   1.5  0.07 0.5  0.4 
1A-Alprazolam   Alprazolam   3.1  0.08 0.5  0.4 
1A-Alprazolam   Alprazolam   6.25  0.10 0.5  0.4 
2A-Alprazolam   Alprazolam   0.0  0.06 0.4  0.3 
2A-Alprazolam   Alprazolam   1.5  0.08 0.4  0.3 
2A-Alprazolam   Alprazolam   3.1  0.09 0.4  0.3 
2A-Alprazolam   Alprazolam   6.25  0.10 0.4  0.3 
1B-Alprazolam   Alprazolam   0.0  0.05 0.5  0.6 
1B-Alprazolam   Alprazolam   1.5  0.08 0.5  0.6 
1B-Alprazolam   Alprazolam   3.1  0.10 0.5  0.6 
1B-Alprazolam   Alprazolam   6.25  0.11 0.5  0.6 
1A-Codeine    Codeine   0.0  0.10 0.5  0.6 
1A-Codeine    Codeine   1.5  0.30 0.5  0.6 
1A-Codeine    Codeine   3.1  0.41 0.5  0.6 
1A-Codeine    Codeine   6.25  0.62 0.5  0.6 
2A-Codeine    Codeine   0.0  0.09 0.6  0.7 
2A-Codeine    Codeine   1.5  0.29 0.6  0.7 
2A-Codeine    Codeine   3.1  0.40 0.6  0.7 
2A-Codeine    Codeine   6.25  0.62 0.6  0.7 
1B-Codeine    Codeine   0.0  0.09 0.6  0.5 
1B-Codeine    Codeine   1.5  0.28 0.6  0.5 
1B-Codeine    Codeine   3.1  0.41 0.6  0.5 
1B-Codeine    Codeine   6.25  0.61 0.6  0.5 

目前我使用下列绘图数据:

plotIntra<-function(working2.df){ 
    ggplot(working2.df,aes(x=TCAmount,y=Ratio, group=group.name, colour=group.name))+ 
     geom_smooth(method=lm, level=0.95, se=FALSE, aes(colour=group.name))+ 
     theme_bw()+ 
     ggtitle(working2.df$Component.name.x[1])+ 
     xlab("Amount (ng/mL)") +ylab("Response Ratio")+ 
     expand_limits(y=0)+ 
     geom_text(data=working2.df, aes(label=paste("y=", Slope[1], "x+", Intercept[1], sep=""))) 
} 

lapply(split(working2.df, working2.df$Component.name.x), function(x) try(plotIntra(x))) 

我希望R可以按group.name分别抓取每个SlopeIntercept一次,并将其粘贴在具有相应曲线的图上。到目前为止,我只设法以y = mx + b结束每个绘图上的所有曲线(叹息),或者让y = mx + b文本在同一图上粘贴许多重复次数。

我一直在努力做的(但不知道是否有可能)是使[R要么认为是包含SlopeIntercept只有一次数据的一个子集,它通过匹配group.name,或以某种方式使用grepsubset来提取数据。也许是这样的(但不工作):

geom_text(data=working2.df, grep("1A", working2.df$group.name)), 
    aes(label=paste("y=", Slope[1], "x+", Intercept[1], sep="")) 

任何人都认为他们可以在这方面帮助,是一个ggplot英雄?

回答

1

您可以在函数坍缩的值,并使用不同的参数data=geom_text

plotIntra<-function(working2.df){ 
    lbls <- aggregate(cbind(TCAmount,Ratio)~group.name+Slope+Intercept, working2.df, mean) 
    ggplot(working2.df,aes(x=TCAmount,y=Ratio, group=group.name, colour=group.name))+ 
     geom_smooth(method=lm, level=0.95, se=FALSE, aes(colour=group.name))+ 
     theme_bw()+ 
     ggtitle(working2.df$Component.name.x[1])+ 
     xlab("Amount (ng/mL)") +ylab("Response Ratio")+ 
     expand_limits(y=0)+ 
     geom_text(data=lbls, aes(label=paste("y=", Slope[1], "x+", Intercept[1], sep=""))) 
} 

lapply(split(working2.df, working2.df$Component.name.x), function(x) try(plotIntra(x))) 
+0

那伟大工程。它确实在图例中的子弹点上添加了字母“a”?这可以删除吗?我也知道有关于在plot上移动geom_text的说明,但是您会知道如何移动已粘贴的行,因为我不确定当您使用聚合然后粘贴时单个文本的“对象名称”是什么它?谢谢! –

+0

从另一篇文章中发现(http://stackoverflow.com/questions/2409357/how-to-nicely-annotate-a-ggplot2-manual)show_guide = F添加到geom_text从项目符号点删除文本。仍然在寻找帮助来移动图形周围的文本! –

+0

我现在注意到“mean”实际上是计算由聚合生成的子集的平均斜率和截距 - 因此它为每一行绘制了相同的y = mx + b方程。我想显示表中给出的每行的y = mx + b等式 - 而不是平均值。是否可以使用另一个函数来循环显示斜率和x-ints以进行绘图? –