如何防止线条延伸到整个图表

tab*_*imm 5 r ggplot2

目前,下面的代码(更全面的代码的一部分)生成一条从图形的最左边到最右边的线。

geom_abline(intercept=-8.3, slope=1/1.415, col = "black", size = 1,
          lty="longdash", lwd=1) +
Run Code Online (Sandbox Code Playgroud)

但是,我希望该行的范围仅从 x=1 到 x=9;x 轴的范围是 1-9。

在ggplot2中,是否有命令可以减少从手动定义的截距和斜率导出的线,使其仅覆盖x轴值限制的范围?

aos*_*ith 7

如果您想手动定义线,可以使用geom_segment而不是。geom_abline如果您的斜率源自您正在绘制的数据集,那么最简单的方法就是stat_smooth使用method = "lm"

这是一个包含一些玩具数据的示例:

set.seed(16)
x = runif(100, 1, 9)
y = -8.3 + (1/1.415)*x + rnorm(100)

dat = data.frame(x, y)
Run Code Online (Sandbox Code Playgroud)

估计截距和斜率:

coef(lm(y~x))

(Intercept)           x 
 -8.3218990   0.7036189 
Run Code Online (Sandbox Code Playgroud)

首先绘制图进行geom_abline比较:

ggplot(dat, aes(x, y)) +
    geom_point() +
    geom_abline(intercept = -8.32, slope = 0.704) +
    xlim(1, 9)
Run Code Online (Sandbox Code Playgroud)

相反,必须为和geom_segment定义行的开头和结尾。确保该行在 x 轴上的 1 和 9 之间被截断。xy

ggplot(dat, aes(x, y)) +
    geom_point() +
    geom_segment(aes(x = 1, xend = 9, y = -8.32 + .704, yend = -8.32 + .704*9)) +
    xlim(1, 9)
Run Code Online (Sandbox Code Playgroud)

使用stat_smooth。默认情况下,这将仅在解释变量的范围内绘制线条。

ggplot(dat, aes(x, y)) +
    geom_point() +
    stat_smooth(method = "lm", se = FALSE, color = "black") +
    xlim(1, 9)
Run Code Online (Sandbox Code Playgroud)