如何在运行ggplot2代码时解决美学错误?

时间:2020-06-25 11:45:57

标签: r ggplot2

多元线性回归模型是 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

帮助我解决错误并获得完美的图形

1 个答案:

答案 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")

enter image description here