2011-11-23 201 views
8

道歉,这个例子不是很好,但它突出了点。geom_smooth() - 缩放y轴,丢失平滑数据

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限制了用于构建的平滑曲线(逻辑)的数据值,你怎么能使用所有的数据绘制曲线,然后“变焦”它(WRT的y轴)。

让我知道如果这不明确。

感谢

+0

的'geom_smooth'都不会改变,从我的理解,在未来的版本(应该是出围绕圣诞节/新年的默认缩放年份)。看到这里,例如:http://stackoverflow.com/questions/7857020/ggplot2-zooming-in-on-geom-smooth-automatically-using-coord-cartesian –

回答

13

使用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)) 
+0

灿烂的塔!总是一种方式,只是知道在哪里看。 – nzcoops