0

我正在尝试为我使用and函数geom_text生成的一系列 ggplot添加选择文本。本质上,我正在为每个包含 3 条曲线的图创建一个 ggplot 每个 - 每个图一个。lapplysplitComponent.name.xgroup.name

因此,作为我的数据框(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 每次抓取一次Slope并将其粘贴到带有相应曲线的图形上。到目前为止,我只设法为每个图(sigh)上的所有曲线最终得到 y=mx+b ,或者将 y=mx+b 文本粘贴在同一个图上很多次重复。Interceptgroup.name

我一直在尝试做的(但不知道是否可能)是让 R 要么认为有一个数据子集包含SlopeandIntercept仅一次并且它匹配 by group.name,要么使用greporsubset以某种方式拉数据。也许是这样的(但这不起作用):

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

有人认为他们可以帮助解决这个问题并成为 ggplot 英雄吗?!

4

1 回答 1

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)))
于 2015-12-09T23:01:10.703 回答