如何在ggplot2 R图中设置轴的极限?


358

我绘制以下内容:

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,而不是整个范围。

我怎样才能做到这一点?

Answers:


584

基本上你有两个选择

scale_x_continuous(limits = c(-5000, 5000))

要么

coord_cartesian(xlim = c(-5000, 5000)) 

第一个删除指定范围之外的所有数据点,第二个仅调整可见区域。在大多数情况下,您不会看到差异,但是如果对数据进行拟合,则可能会更改拟合值。

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

+ xlim(-5000, 5000)

有关更多信息,请参见的描述coord_cartesian

RStudio的cheatsheetggplot2使这很直观地清除。这是该速查表的一小部分:

在此处输入图片说明

CC BY下分发


16
现在也有library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)(默认为oob=censor);看?squish?censorgroups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
奔Bolker

5
注意 如果您正在处理某些顶点超出限制的线/多边形,则可能会出现问题,因为整个对象已从绘图中删除
geotheory 2014年

1
@geotheory:这也适用coord_cartesian吗?
尼克·斯汤纳

1
不,我应该更具体一点,只是第一种方法
geotheory,2014年

在实践中,出于“打印”的目的,coord_cartesian(xlim = 您可能还需要重置ylim,以及重置标签和网格中断。
PatrickT 2015年

44

快速说明:如果您还coord_flip()用于翻转x和y轴,则将无法使用来设置范围限制,coord_cartesian()因为这两个功能是互斥的(请参见此处)。

幸运的是,这很容易解决。将限制设置在coord_flip()这样的范围内:

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

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


我类似但更棘手的问题发布在这里stackoverflow.com/questions/61531149/…关于如何仅限制一个侧面
IVIM
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.