多元线性回归模型是 Load = -33.124 + 1.470VO2max-4.909Gradient 我正在ggplot2中工作,尝试通过更改“ Gradient = 0、5、10和15”来绘制四个不同的回归线,还绘制了VO2max = 50,60和75的线段,并找到相交点以获得负载的值。
library("ggplot2")
df<- data.frame(load=rep(c(0,4.4,10.7,17,21.4), each=4),
Gradient=c(0,5,10,15),
VO2max=c(28.0,41.0,56.3,71.3,28.2,41.1,57.0,75.0,31.0,45.4,63.6,82.1,
32.0,48.8,66.8,85.5,34.6,50.5,69.9,89.3))
df$Gradient <- as.factor(df$Gradient)
x5 <- -57.669+7.35
x10 <- -82.214+14.7
x15 <- -106.759+22.05
ggplot(df, aes(vo2max,load, group = Gradient)) +
geom_point(aes(shape = Gradient), size = 3) +
geom_abline(aes(slope = 1.47, intercept = -33.124)) +
geom_abline(aes(slope = 1.47, intercept = -57.669)) +
geom_abline(aes(slope = 1.47, intercept = -82.214)) +
geom_abline(aes(slope = 1.47, intercept = -106.759)) +
geom_segment(data = data.frame(x = c(50, 60, 75),
y = c(x5, x10, x15),
Gradient = factor(c(50, 60, 75))),
aes(x, y, xend = 0, yend = y, colour = Gradient),
linetype = 2) +
geom_point(data = data.frame(VO2max = c(50, 60, 75),
load = c(x5, x10, x15),
Gradient = 1)) +
coord_cartesian(xlim = c(0, 105), ylim = c(0, 25),
expand = 0) +
geom_hline(data = data.frame(x = c(50, 60, 75),
Gradient = factor(c(50, 60, 75))),
aes(yintercept = y, colour = Gradient), linetype = 2) +
theme_minimal() +
theme(axis.line = element_line()) +
guides(colour = "none")
data.frame(x = c(50, 60, 75),y = c(x5, x10, x15))
通过运行代码,我得到以下错误: 不知道如何为data.frame类型的对象自动选择比例。默认为连续。 错误:美学的长度必须为1或与数据(20)相同:x
帮助我解决错误并获得完美的图形
答案 0 :(得分:1)
这里有一些错误。首先,您尚未根据geom_abline
调用隐含的回归线公式计算出截距点。
第二,在您最初的美学呼吁中,您完成了aes(vo2max
,但是变量称为VO2max
(区分大小写)。
第三,在调用geom_hline
时,您创建的数据框具有一个名为x
的变量,但是您正在将yintercept
设置为一个名为y
的变量,不存在。正如伊恩·坎贝尔(Ian Campbell)在评论中指出的那样,您想在这里geom_hline
。
您似乎通过手动从your previous question反转绘图中的轴而使自己陷入困境。通过将+ coord_flip()
添加到上一个绘图中,您可以更简单地完成此操作。
以下修改后的代码有效:
x5 <- -57.669+ 1.47 * 50
x10 <- -82.214+ 1.47 * 60
x15 <- -106.759+ 1.47 * 75
ggplot(df, aes(VO2max,load, group = Gradient)) +
geom_point(aes(shape = Gradient), size = 3) +
geom_abline(aes(slope = 1.47, intercept = -33.124)) +
geom_abline(aes(slope = 1.47, intercept = -57.669)) +
geom_abline(aes(slope = 1.47, intercept = -82.214)) +
geom_abline(aes(slope = 1.47, intercept = -106.759)) +
geom_point(data = data.frame(VO2max = c(50, 60, 75),
load = c(x5, x10, x15),
Gradient = 1)) +
geom_segment(data = data.frame(x = c(50, 60, 75),
y = c(x5, x10, x15),
Gradient = factor(c(50, 60, 75))),
aes(x, y, xend = 0, yend = y, colour = Gradient),
linetype = 2) +
coord_cartesian(xlim = c(0, 105), ylim = c(0, 25),
expand = 0) +
geom_vline(data = data.frame(x = c(50, 60, 75),
Gradient = factor(c(50, 60, 75))),
aes(xintercept = x, colour = Gradient), linetype = 2) +
theme_minimal() +
theme(axis.line = element_line()) +
guides(colour = "none")