我绘制如下图:

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=-5000到5000之间的区域,而不是整个范围。

我该怎么做呢?


基本上你有两个选择

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

or

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

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

你也可以使用简写函数xlim(或ylim),它像第一个选项一样删除给定范围之外的数据点:

+ xlim(-5000, 5000)

欲了解更多信息,请查看coord_cartesian的描述。

RStudio的ggplot2备备单在视觉上非常清楚地说明了这一点。以下是小抄中的一小部分:

在CC BY下分发。


快速注意:如果你也使用coord_flip()来翻转x轴和y轴,你将无法使用coord_cartesian()设置范围限制,因为这两个函数是排他的(见这里)。

幸运的是,这很容易解决;在coord_flip()中设置限制,如下所示:

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

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