如何在ggplot2 R图中设置坐标轴限制?

436

我绘制了以下内容:

library(ggplot2)    

carrots <- data.frame(length = rnorm(500000, 10000, 10000))
cukes <- data.frame(length = rnorm(50000, 10000, 20000))
carrots$veg <- 'carrot'
cukes$veg <- 'cuke'
vegLengths <- rbind(carrots, cukes)

ggplot(vegLengths, aes(length, fill = veg)) +
 geom_density(alpha = 0.2)

现在假设我只想绘制x=-50005000之间的区域,而不是整个范围。

我该怎么做?

2个回答

701

基本上你有两个选项

scale_x_continuous(limits = c(-5000, 5000))
或者
coord_cartesian(xlim = c(-5000, 5000)) 

第一个选项会删除给定范围外的所有数据点,而第二个选项仅调整可见区域。在大多数情况下,您看不到区别,但如果您将任何内容拟合到数据上,它可能会改变拟合值。

您还可以使用简写函数 xlim(或ylim),与第一个选项类似,会删除给定范围外的数据点:

+ xlim(-5000, 5000)

如需更多信息,请查看coord_cartesian的说明。

ggplot2RStudio备忘单中,这一点通过可视化方式表述得非常清楚。以下是备忘单的一个小部分:

enter image description here

基于CC BY发布。


20
现在还有一个库(library(scales)),可以使用scale_x_continuous函数来设置x轴的范围限制为-5000到5000,同时也可以使用参数oob=squish来避免超出范围的数据在图表中出现(默认情况下是oob=censor)。如果需要了解更多关于squishcensor的信息,请查看?squish?censor。原文链接:https://groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU - Ben Bolker
6
请注意,如果您处理的是一些顶点在限制范围之外的线条/多边形,则整个对象将从图中删除。 - geotheory
1
@geotheory:coord_cartesian方法也是这样吗? - Nick Stauner
1
不好意思,我应该更具体一些,只需要第一个方法。 - geotheory
实际上,为了“打印”目的,在使用coord_cartesian(xlim = 时,您可能还需要重置ylim,并重置标签和网格间隔。 - PatrickT
你好,我正在创建一个使用geom_smooth()的复杂图形。虽然其他所有内容都相同,但我不知道为什么这两种方法会产生不同的曲线: scale_y_continuous(limits=c(0,0.013)) 和 coord_cartesian(ylim = c(0,0.013)) 哪个是正确的? 我只想切断y轴。 - skan

56

小提示:如果您还在使用 coord_flip()翻转x和y轴,那么您将无法使用coord_cartesian()设置范围限制,因为这两个函数是互斥的(请参见此处)。

幸运的是,这很容易解决;只需在coord_flip()内设置您的限制即可,方法如下:

p + coord_flip(ylim = c(3,5), xlim = c(100, 400))

这只是改变可见范围(即不删除数据点)。


这里有一个类似但更难的问题,关于如何在ggplot2 R图中仅限制一个侧面的限制。 - IVIM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接