Вот одна возможность, используя @ код Винсента . Он работает с последней версией ggplot2 (v. 0.9) и версией R-forge directlabels (v. 2.5). Я также проверил код с ggplot2 0.8.9
и directlabels 2.4
. (Версия directlabels
, выпущенная на CRAN, не будет работать с ggplot2 0.9
.)
Идея в основном состоит в том, чтобы заменить ваши метки A
, B
, C
, G
на уравнения регрессии. Конечно, вы можете хранить последние другим способом, но я думаю, что это существенно усложнит выражение для построения, поэтому давайте сделаем это как можно более простым. Предполагая, что у нас уже есть переменная @ Vincent d
,
> head(d)
Xax variable value
1 0.22 A 0.451
2 0.34 A 0.491
3 0.54 A 0.389
4 0.34 A 0.425
5 0.53 A 0.457
6 0.12 A 0.436
давайте заменим variable
метки уравнениями, которые вы вычислили:
library(plyr)
lm.stats <- ddply(d, "variable",
function(u) {
r <- lm(value ~ Xax, data=u)
c(coef(r), r.squared=summary(r)$r.squared)
})
my.formatter <- function(x, digits=2) {
x <- round(x, digits=digits)
out <- paste(x[1], ifelse(x[2]>0, "+", ""), x[2], "x", sep="")
out <- paste(out, " (R2=", x[3], ")", sep="")
return(out)
}
d$variablef <- d$variable
levels(d$variablef) <- apply(lm.stats[2:4], 1, my.formatter)
Маленькая вспомогательная функция, my.formatter
, отвечает за сборку различной статистики, которую вы вычислили с помощью ddply
. Обратите внимание, что я сделал копию variable
на тот случай, если нам понадобится последняя. А вот и сюжетный материал:
p <- ggplot(d, aes(Xax,value, col=variablef)) +
geom_point() +
stat_smooth(method=lm)
library(directlabels)
direct.label(p)
Следует отметить, что вы также можете иметь аннотированные кривые с помощью функции labcurve()
из пакета Hmisc . Я также могу представить более простые решения, использующие ggplot или решетку, а именно просто написать уравнения регрессии вдоль линий регрессии, с правильной ориентацией и небольшим смещением по оси x, чтобы избежать наложения, но это не обязательно будет очень переносимым, если ваш набор данных происходит изменить.
![enter image description here](https://i.stack.imgur.com/s7XUp.png)