目前,下面的代码(更全面的代码的一部分)会生成一条从图的最左边到最右边的行。
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轴值限制的范围?
答案 0 :(得分:3)
如果您想手动定义该行,则可以使用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)
估计拦截和斜率:
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
,必须为x
和y
定义行的开头和结尾。确保线在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)