当前,以下代码(更全面的代码的一部分)生成了一条线,其范围从图形的最左侧到最右侧。

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

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

在ggplot2中,是否有一条命令来减少从手动定义的截距和斜率派生的线以仅覆盖x轴值限制的范围?

最佳答案

如果要手动定义行,可以使用geom_segment而不是geom_abline。如果您的坡度是从您要绘制的数据集中得出的,那么最简单的方法是将stat_smoothmethod = "lm"结合使用。

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

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

dat = data.frame(x, y)

估计截距和斜率:
coef(lm(y~x))

(Intercept)           x
 -8.3218990   0.7036189

首先使用geom_abline进行绘图以进行比较:
ggplot(dat, aes(x, y)) +
    geom_point() +
    geom_abline(intercept = -8.32, slope = 0.704) +
    xlim(1, 9)

而是使用geom_segment,必须同时为xy定义行的开头和结尾。确保在x轴上的直线在1到9之间被截断。
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)

使用stat_smooth。默认情况下,这只会在解释变量的范围内绘制线条。
ggplot(dat, aes(x, y)) +
    geom_point() +
    stat_smooth(method = "lm", se = FALSE, color = "black") +
    xlim(1, 9)

关于r - 如何防止线条延伸到整个图形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26154255/

10-12 19:02