geom_smooth基于scale_y_continuous限制移动

时间:2016-07-26 11:09:15

标签: r ggplot2

这是平滑的cars数据的停止距离与速度的关系图。

ggplot(cars, aes(x=cars$speed,y=cars$dist)) + 
+   scale_x_continuous(expand = c(0, 0)) +
+   scale_y_continuous(expand = c(0, 0), limits=c(-20,125)) + geom_smooth()

enter image description here

请注意,灰色置信区间最高可达112.5。

现在假设我想通过更改y轴限制来裁剪图表顶部的一些未使用区域。

ggplot(cars, aes(x=cars$speed,y=cars$dist)) + 
+   scale_x_continuous(expand = c(0, 0)) +
+   scale_y_continuous(expand = c(0, 0), limits=c(-20,116)) + geom_smooth()
Warning message:
Removed 1 rows containing non-finite values (stat_smooth). 

注意警告信息;我会回过头来看。

enter image description here

现在看看灰色置信区间如何上升到大约104? 我怀疑这是因为geom_smooth函数丢弃了一个原始数据点,因为它超出了范围,并且改变了平滑计算。 (实际上,其中一个停止距离是120.)我假设这是警告信息的含义。

我该如何解决这个问题?原始情节中的浪费空间并不是一个很大的问题,但是根据我自己的数据,我会浪费大量的空间。我是否需要单独计算平滑公式,然后使用geom_ribbongeom_line进行绘制?

geom_smoothfullrange=TRUE有一个选项,如果你的x轴限制不包括所有数据,你可以使用它。但这不起作用,并且没有fulldomain=TRUE选项。

编辑:此处描述的问题ggplot2: geom_smooth confidence band does not extend to edge of graph, even with fullrange=TRUE中描述的问题不同(即使解决方案基本相同)。这个问题是关于切断的灰色置信区间。这个问题是关于平滑线和轴限制更改的间隔。我不知道有人在寻找这个问题的解决方案时可能会认识到另一个问题有相同的解决方案;我只是偶然的机会。

2 个答案:

答案 0 :(得分:3)

我在这里找到了解决方案(尽管描述的问题不同,解决方案是相同的): ggplot2: geom_smooth confidence band does not extend to edge of graph, even with fullrange=TRUE

解决方案是使用coord_cartesian来约束y轴,而不是scale_y_continuous(..., limits=...)。我们甚至可以摆脱进入负阻挡距离的无意义部分。

ggplot(cars, aes(x=cars$speed,y=cars$dist)) + 
  coord_cartesian(ylim=c(0,116)) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) + geom_smooth()

enter image description here

有关使用比例或坐标系统控制绘图限制之间差异的更多信息,请参阅 http://docs.ggplot2.org/current/coord_cartesian.html

答案 1 :(得分:3)

scale()的限制首先将限制之外的值设置为missing,然后计算geom。

coords()中的限制首先计算geoms,然后仅绘制限制内的信息。

有关可重复的示例,请参阅http://rpubs.com/INBOstats/zoom_in