在 R 中使用 Geom_Text 选择性粘贴的子集或 Grep

Subset or Grep for selectively pasting using Geom_Text in R

我正在尝试使用 geom_text 添加 select 文本,用于我使用 lapplysplit 函数生成的一系列 ggplots。本质上,我正在为每个 Component.name.x 创建一个 ggplot,其中每个图包含 3 条曲线 - 每个 group.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 在每个 group.name 中抓取每个 SlopeIntercept 一次,并将其粘贴到具有相应曲线的图表上。到目前为止,我只设法为每个图上的所有曲线得到 y=mx+b (sigh) 或将 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 英雄吗?!

您可以折叠函数中的值并为 geom_text

使用不同的 data= 参数
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)))