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

我绘制如下图:

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

我该怎么做呢?

693169 次浏览

基本上你有两个选择

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

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

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

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

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