本篇和R for Data Science中关于limits的部分是一样的,之所以再写一遍仅仅是个人有了新的感悟之后想用不同的组织语言重新总结以下。
scale limits和coordinate system limits的区别:两者实现的效果是x轴和y轴的坐标范围一致,但plot展示的数据信息已经完全不一样了。
究其原因是两者的工作方式不同:设置scale limits,超过设置范围的数据被扔掉(ggplot2的默认行为);这是coordinate system limits,仍然使用所有的数据(full data),但只展示plot的一部分(zoom in)。
base <- ggplot(mpg, aes(drv, hwy)) +
geom_hline(yintercept = 28, colour = "red") +
geom_boxplot()
base
p2<-base + coord_cartesian(ylim = c(10, 35)) # works as expected
p3<- base + ylim(10, 35) # distorts the boxplot
#> Warning: Removed 6 rows containing non-finite values (stat_boxplot).
ggpubr::ggarrange(base,p2,p3,nrow=1)
the difference between scale limits and coordinate system limits
限制scale limits的同时又想使用full data,可以用
scale_y_continous()
的oob
(oob=out of boundary)参数。但p2
和 p4
还是有些许的差别。
# default oob=scales::censor (删减)
# scales::squish (将边界外的值压到range内)
p4<-base + scale_y_continuous(limits=c(10,35),oob = scales::squish)
ggpubr::ggarrange(base,p2,p3,p4,nrow=1)
out of boundary handing
网友评论