在不删除数据的情况下限制ggplot2轴(外部限制):缩放


106

如果在ggplot中指定轴限制,则将删除偏远点。这对点很好,但是您可能希望绘制与指定范围相交的线,但是ggplot rangexlim/ylim方法会删除这些线。还有另一种方法可以指定绘图轴范围而不删除外围数据吗?

例如

require(ggplot2)
d = data.frame(x=c(1,4,7,2,9,7), y=c(2,5,4,10,5,3), grp=c('a','a','b','b','c','c'))
ggplot(d, aes(x, y, group=grp)) + geom_line()
ggplot(d, aes(x, y, group=grp)) + geom_line() + scale_y_continuous(limits=c(0,7))
ggplot(d, aes(x, y, group=grp)) + geom_line() + ylim(0,7)

Answers:


168

Hadley在第99页上对此进行了解释;他的ggplot2书的第 133 页(第一版),或者如果您有第二版,则第160-161页。

正如您所说,问题在于limits刻度或设置内部ylim()会因为约束数据而丢弃数据。为了实现真正的缩放(保留所有数据),您需要在笛卡尔坐标系(或其他坐标系https://ggplot2.tidyverse.org/reference/#section-coordinate-systems)内设置限制。有关更多信息,请参见:http : //docs.ggplot2.org/current/coord_cartesian.html

ggplot(d, aes(x, y, group=grp)) + 
    geom_line() + 
    coord_cartesian(ylim=c(0, 7))

在此处输入图片说明


2
如果因为我使用coord_cartesian不是一个选择怎么geom_boxplot办?
Everettss

3
coord_cartesiangeom_boxplot还是其他几何图形的一个选项。
eipi10 '18

是的,但是由于需要这样做,coord_flip而且您不能有两个坐标,因此无法弄清楚如何进行水平箱形图绘制。
jtr13

2
没关系,您可以将ylim设置为coord_flip替代coord_cartesian
jtr13 '18 -10-5
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.