这是平滑的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()
请注意,灰色置信区间最高可达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).
注意警告信息;我会回过头来看。
现在看看灰色置信区间如何上升到大约104?
我怀疑这是因为geom_smooth
函数丢弃了一个原始数据点,因为它超出了范围,并且改变了平滑计算。 (实际上,其中一个停止距离是120.)我假设这是警告信息的含义。
我该如何解决这个问题?原始情节中的浪费空间并不是一个很大的问题,但是根据我自己的数据,我会浪费大量的空间。我是否需要单独计算平滑公式,然后使用geom_ribbon
和geom_line
进行绘制?
geom_smooth
,fullrange=TRUE
有一个选项,如果你的x轴限制不包括所有数据,你可以使用它。但这不起作用,并且没有fulldomain=TRUE
选项。
编辑:此处描述的问题与ggplot2: geom_smooth confidence band does not extend to edge of graph, even with fullrange=TRUE中描述的问题不同(即使解决方案基本相同)。这个问题是关于切断的灰色置信区间。这个问题是关于平滑线和轴限制更改的间隔。我不知道有人在寻找这个问题的解决方案时可能会认识到另一个问题有相同的解决方案;我只是偶然的机会。
答案 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()
有关使用比例或坐标系统控制绘图限制之间差异的更多信息,请参阅 http://docs.ggplot2.org/current/coord_cartesian.html
答案 1 :(得分:3)
scale()的限制首先将限制之外的值设置为missing,然后计算geom。
coords()中的限制首先计算geoms,然后仅绘制限制内的信息。
有关可重复的示例,请参阅http://rpubs.com/INBOstats/zoom_in。