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

Dav*_*d B 336 plot r ggplot2

我绘制以下内容:

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)
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

mid*_*iby 557

基本上你有两个选择

scale_x_continuous(limits = c(-5000, 5000))
Run Code Online (Sandbox Code Playgroud)

要么

coord_cartesian(xlim = c(-5000, 5000)) 
Run Code Online (Sandbox Code Playgroud)

第一个删除给定范围之外的所有数据点,第二个仅调整可见区域.在大多数情况下,您不会看到差异,但如果您对数据适用任何内容,则可能会更改拟合值.

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

+ xlim(-5000, 5000)
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看说明coord_cartesian.

RStudio的cheatsheetggplot2使这很清楚直观.这是备忘单的一小部分:

在此输入图像描述

CC BY下分发.

  • 现在还有`库(秤); ... + scale_x_continuous(limits = c(-5000,5000),oob = squish)`(默认为`oob = censor`); 见`?squish`,`?censor`:https://groups.google.com/forum/#!topic /ggplot2/AsJ6xpmR9tU (16认同)
  • NB.如果您正在处理某些顶点超出限制的线/多边形,这可能会有问题,因为整个对象已从绘图中删除 (5认同)

小智 41

快速注意:如果您还使用coord_flip()翻转x和y轴,则无法设置范围限制,coord_cartesian()因为这两个函数是独占的(请参阅此处).

幸运的是,这是一个简单的解决方案; coord_flip()像这样设置你的限制:

p + coord_flip(ylim = c(3,5), xlim = c(100, 400))
Run Code Online (Sandbox Code Playgroud)

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