我想知道如何添加回归线方程和R ^ 2 ggplot.我的代码是
library(ggplot2)
df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
p <- ggplot(data = df, aes(x = x, y = y)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = y ~ x) +
geom_point()
p
Run Code Online (Sandbox Code Playgroud)
任何帮助将受到高度赞赏.
R包ggpmisc可用于显示lm模型和poly模型的方程ggplot2(参见此处参考).想知道如何使用nls模型方程结果.以下是我的MWE.ggplot2ggmisc
library(ggpmisc)
args <- list(formula = y ~ k * e ^ x,
start = list(k = 1, e = 2))
ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
stat_fit_augment(method = "nls",
method.args = args)
Run Code Online (Sandbox Code Playgroud) 我想生成一个图形,将图形的四个方面与每个方面的插图相结合,显示相应图的细节。这是我尝试过的事情之一:
#create data frame
n_replicates <- c(rep(1:10,15),rep(seq(10,100,10),15),rep(seq(100,1000,100),15),rep(seq(1000,10000,1000),15))
sim_years <- rep(sort(rep((1:15),10)),4)
sd_data <- rep (NA,600)
for (i in 1:600) {
sd_data[i]<-rnorm(1,mean=exp(0.1 * sim_years[i]), sd= 1/n_replicates[i])
}
max_rep <- sort(rep(c(10,100,1000,10000),150))
data_frame <- cbind.data.frame(n_replicates,sim_years,sd_data,max_rep)
#do first basic plot
library(ggplot2)
plot1<-ggplot(data=data_frame, aes(x=sim_years,y=sd_data,group =n_replicates, col=n_replicates)) +
geom_line() + theme_bw() +
labs(title ="", x = "year", y = "sd")
plot1
#make four facets
my_breaks = c(2, 10, 100, 1000, 10000)
facet_names <- c(
`10` = "2, 3, ..., 10 replicates",
`100` = "10, 20, ..., 100 …Run Code Online (Sandbox Code Playgroud) 我从这里借用了这个示例数据集:
# Load library
library(ggplot2)
# Load data
data(mtcars)
# Plot data
p <- ggplot(mtcars,aes(x = disp, y = mpg)) + geom_point() + facet_grid(gear ~ am)
p <- p + geom_smooth(method="lm")
print(p)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,回归方法和公式在所有方面都是相同的。如果我们想指定构面(或面板) 6 的公式,我们可以使用以下代码:
# Smoothing function with different behaviour depending on the panel
custom.smooth <- function(formula, data,...){
smooth.call <- match.call()
if(as.numeric(unique(data$PANEL)) == 6) {
# Linear regression
smooth.call[[1]] <- quote(lm)
# Specify formula
smooth.call$formula <- as.formula("y ~ log(x)")
}else{
# Linear regression
smooth.call[[1]] <- …Run Code Online (Sandbox Code Playgroud) 几年前,一张海报询问如何在下面的链接中添加回归线方程和R2在ggplot图上.
最重要的解决方案是:
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));
}
p1 <- p + geom_text(x = 25, y = 300, label = lm_eqn(df), parse = TRUE)
Run Code Online (Sandbox Code Playgroud)
我正在使用此代码,它很有用.但是,我想知道是否有可能使这段代码在单独的行上具有R2值和回归线方程,而不是用逗号分隔.
而不是像这样

像这样的东西

在此先感谢您的帮助!
将回归方程、R2 和 p 值(对于方程)巧妙地添加到ggplot图中的最佳(最简单)方法是什么?理想情况下,它应该与组和分面兼容。
第一个图具有回归方程加上使用ggpubr分组的 r2 和 p 值,但它们没有对齐?我错过了什么吗?它们可以作为一个字符串包含在内吗?
library(ggplot)
library(ggpubr)
ggplot(mtcars, aes(x = wt, y = mpg, group = cyl))+
geom_smooth(method="lm")+
geom_point()+
stat_regline_equation()+
stat_cor(aes(label = paste(..rr.label.., ..p.label.., sep = "*`,`~")),
label.x.npc = "centre")
Run Code Online (Sandbox Code Playgroud)
这是ggpmisc 的一个选项,它做了一些奇怪的放置。
编辑奇怪的位置是由 引起的geom=text,我已将其注释掉以提供更好的位置,并添加了 `label.x = "right" 以停止过度绘制。由于@dc37 标记的上标问题,我们仍然根据ggpubr存在未对齐问题
#/sf/answers/2639618271/
library(ggpmisc)
ggplot(mtcars, aes(x = wt, y = mpg, group = cyl))+
geom_smooth(method="lm")+
geom_point()+
stat_poly_eq(formula = "y~x",
aes(label = paste(..eq.label.., ..rr.label.., sep = "*`,`~")),
parse = …Run Code Online (Sandbox Code Playgroud) stat_poly_eq我正在尝试使用的函数在绘图上显示方程ggpmisc。
我的问题是如何通过引用参数来改变方程中y= ...的。y1=...y2=...key
我尝试eq.with.lhs在映射中添加参数,但它无法识别该参数。我尝试将向量传递给eq.with.lhs参数,但它与每个方程中的两个元素重叠......
你有更好的主意吗?
在最后一种情况下,我可以geom_text自己计算方程系数后使用,但这似乎是解决问题的效率较低的方法。
这是我的问题的代表。
data <- data.frame(x = rnorm(20)) %>%
mutate(y1 = 1.2*x + rnorm(20, sd=0.2),
y2 = 0.9*x + rnorm(20, sd=0.3)) %>%
gather(value = value, key = key, -x)
ggplot(data, aes(x = x, y = value)) +
geom_point(aes(shape = key, colour = key)) +
stat_poly_eq(aes(label = ..eq.label.., colour = key),
formula = y ~ poly(x, 1, raw = TRUE),
eq.x.rhs = "x", …Run Code Online (Sandbox Code Playgroud) 我正在使用R包ggpmisc。想知道如何在回归方程中将帽子放在 y 上,或者如何在图形的回归方程中获得自定义响应和解释变量名称。
library(ggplot2)
library(ggpmisc)
df <- data.frame(x1 = c(1:100))
set.seed(12345)
df$y1 <- 2 + 3 * df$x1 + rnorm(100, sd = 40)
p <- ggplot(data = df, aes(x = x1, y = y1)) +
geom_smooth(method = "lm", se=FALSE, color="black", formula = y ~ x) +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
geom_point()
p
Run Code Online (Sandbox Code Playgroud)
我试图用箭头指向折线图中的最高点来注释折线图,并在绘图上显示箭头和最大值。我正在使用mtcars数据集作为参考。下面是我的代码。
e <- df$mpg
ggplot(df, aes(x=e, y=df$hp)) +
geom_line() +
annotate("segment", color="blue", x=max(e), xend = max(e), y=max(df$hp),
yend=max(df$hp), arrow=arrow())
Run Code Online (Sandbox Code Playgroud)
提前致谢,
我有一个 ggplot 对象。我想添加一些带有 的文本annotate(),并且我想以 npc 单位指定文本的坐标。这可能吗?
这个最小的例子演示了文本通常是如何定位的annotate():
library(ggplot2)
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p + annotate("text", x = 30, y = 4.5, label = "hello")
Run Code Online (Sandbox Code Playgroud)
我想达到相同的效果,但不是在本地坐标中指定x和y,我想用 npc 坐标指定它们。出于本示例的目的,我并不担心准确地转换x = 30并y = 4.5转换为 npc 单位。我只是想知道是否可以使用npc单位annotate()。
有两种相关的策略,但它们并不完全令人满意:
人们可以通过将它们指定为,例如,来使用 npc 单位grid::textGrob()。然后可以将grob放置在annotation_custom(),如@baptiste 的这个答案中所示。但是这个解决方案比我想要的要麻烦一些。
“ggpmisc”包包括geom_text_npc(). 但它还不适用于annotate(). 也就是说,annotate("text_npc", ...)似乎不起作用。[编辑:它现在可以工作了。见下面佩德罗·阿法洛的消息。]
还有很多相关的帖子。特别是,Greg Snow 建议使用网格创建一个具有 …
我想知道为什么文本在图中的趋势更高......它不会与 facet_wrap 或 facet_grid 保持一致。在更复杂的数据集图中,由于重叠,文本难以辨认。
以下是重现情节和问题的数据和代码。将 geom="text" 添加到 stat_fit_glance,结果是Error: Discrete value supplied to continuous scale.
library(ggpmisc)
library(ggplot2)
DF <- data.frame(Site = rep(LETTERS[20:24], each = 4),
Region = rep(LETTERS[14:18], each = 4),
time = rep(LETTERS[1:10], each = 10),
group = rep(LETTERS[1:4], each = 10),
value1 = runif(n = 1000, min = 10, max = 15),
value2 = runif(n = 1000, min = 100, max = 150))
DF$time <- as.numeric(DF$time)
formula1 <- y~x
plot1 <- ggplot(data=DF,
aes(x=time, y= value2,group=Site)) + …Run Code Online (Sandbox Code Playgroud) ggplot2 ×11
ggpmisc ×11
r ×11
annotations ×1
coordinates ×1
facet-wrap ×1
ggpubr ×1
grid ×1
label ×1
lm ×1
nls ×1
regression ×1