geom_smooth() - 并缩放y轴,从平滑中丢失数据

时间:2011-11-23 00:28:18

标签: r ggplot2

道歉,这个例子不是那么好,但确实强调了这一点。

mtcars$tran <- factor(mtcars$am, labels=c("Man","Aut"))
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_smooth(aes(colour=tran))
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_point(aes(colour=tran)) 
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_point(aes(colour=tran)) + geom_smooth(aes(colour=tran))
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_smooth(aes(colour=tran)) + scale_y_continuous(limits=c(12,60))

我想要做的是绘制平滑的曲线,但通过限制y轴的比例来“放大”。然而,在计算平滑曲线时,ggplot似乎排除了超出比例限制的任何数据。是的,这似乎合乎逻辑,但我怎么看到我想看到的?在我的实际数据中,(原始)y值的范围在5到14之间,但平滑的曲线完全在7到9之间。因此顶部有很多空的空间。当我将其设置为c(7,9)时,它不再使用该范围之外的点来计算平滑曲线,因此我得到不同的曲线。

我无法通过数据提供,但您可以在此示例中看到此信息。看看在最后一个图中,两个点是否被删除,“Man”曲线的后半部分与原始图形中的不一样。

问题

如果scale_y_continuous限制用于构建平滑曲线(逻辑)的数据值,您如何使用所有数据绘制曲线,然后“放大”它(y轴)。

如果不清楚,请告诉我。

由于

1 个答案:

答案 0 :(得分:17)

使用coord_cartesian代替scale_y_continuous

ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + 
geom_smooth(aes(colour=tran))  +
coord_cartesian(ylim = c(12,60))