【发布时间】:2013-11-11 01:34:44
【问题描述】:
【问题讨论】:
-
最好提供一些可重复的数据并提供您尝试过的内容...
-
建议的重复项指向我已经在我的问题中提供的链接。该链接上的一个未回答的 cmets 也提出了相同的问题,即如何在多面图上添加方程。诀窍似乎是为标签传递
vector/data.frame。我不相信这是重复的。
【问题讨论】:
vector/data.frame。我不相信这是重复的。
这是你想要的吗?
library(ggplot2); library(gridExtra)
ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
geom_point() +
geom_smooth(method="lm") +
facet_wrap(~ Species)
grid.newpage()
vpa_ <- viewport(width = 1, height = 1)
print(p, vp = vpa_)
grid.text("y ~ mx + b", x=0.3, y=0.8)
grid.text("y ~ mx + b", x=0.5, y=0.8)
grid.text("y ~ mx + b", x=0.8, y=0.8)
【讨论】:
annotate,像这样stackoverflow.com/questions/11889625/…
annotate。你知道怎么做吗?
这是一个从answer开始的例子
require(ggplot2)
require(plyr)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
lm_eqn = function(df){
m = lm(y ~ x, df);
eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,
list(a = format(coef(m)[1], digits = 2),
b = format(coef(m)[2], digits = 2),
r2 = format(summary(m)$r.squared, digits = 3)))
as.character(as.expression(eq));
}
创建两个你想要分面的组
df$group <- c(rep(1:2,50))
为两组创建方程式标签
eq <- ddply(df,.(group),lm_eqn)
还有情节
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = y ~ x) +
geom_point()
p1 = p + geom_text(data=eq,aes(x = 25, y = 300,label=V1), parse = TRUE, inherit.aes=FALSE) + facet_grid(group~.)
p1
【讨论】:
annotate 而不是geom_text,但我无法将eq 数据框或eq$V1 列传递给它。你能帮我解决这个问题吗?
annotate。
annotate 与facet_grid 一样。 agstudy 的方法完全不同。但我可能是错的。
loess 多项式拟合怎么办。我必须重新创建loess,然后假设我已经正确设置了所有参数/假设。没有简单的show.eqn 标志或类似的东西吗?如果不是,为什么?这似乎对回归拟合非常重要! (顺便说一句,我知道这不是你的代码。只是在这里问一般人群......)
format() 不再丢弃 coef(m)[1] 的 names 属性,并且 lm_eqn(df) 函数返回 "italic(y) == c(`(Intercept)` = \"-0.83\")… 而不是像 "italic(y) == \"-0.83\" … 这样的东西。这可以通过使用as.numeric(coef(m)[1]) 等丢弃名称属性来纠正。
使用gridExtra,你可以像这样安排你的情节。
library(ggplot2)
library(ggplot2)
iris$x = iris$Sepal.Length
iris$y = iris$Sepal.Width
xx <- range(iris$x)
yy <- range(iris$y)
ll <- by(iris,iris$Species,function(df){
x.eq <- max(xx)-mean(xx)/2
y.eq <- max(yy)*0.95
p <- ggplot(df, aes(x, y)) +
geom_point() +
geom_smooth(method="lm") +
annotate(x=x.eq, y =y.eq , geom='text',
label = lm_eqn(df), size=5,parse=TRUE) +
xlim(xx[1],xx[2])+ylim(yy[1],yy[2])
})
library(gridExtra)
do.call(grid.arrange,ll)
【讨论】:
grid.arrange 似乎更像facet_wrap 而不是facet_grid。那正确吗?如果是这样,我希望 facet_grid 之类的解决方案能够正常工作。