我绘制以下内容:
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))
或者
coord_cartesian(xlim = c(-5000, 5000))
第一个删除给定范围之外的所有数据点,第二个只调整可见区域。在大多数情况下,您不会看到差异,但如果您对数据进行任何拟合,它可能会更改拟合值。
您还可以使用速记函数 xlim
(或 ylim
),它与第一个选项一样删除给定范围之外的数据点:
+ xlim(-5000, 5000)
有关详细信息,请查看 coord_cartesian
的说明。
ggplot2
的 RStudio cheatsheet 在视觉上非常清楚。这是该备忘单的一小部分:
https://i.stack.imgur.com/ciyvf.png
在 CC BY 下分发。
快速说明:如果您还使用 coord_flip()
来翻转 x 和 y 轴,您将无法使用 coord_cartesian()
设置范围限制,因为这两个函数是互斥的(请参阅 here)。
幸运的是,这很容易解决;在 coord_flip()
内设置您的限制,如下所示:
p + coord_flip(ylim = c(3,5), xlim = c(100, 400))
这只是改变可见范围(即不删除数据点)。
不定期副业成功案例分享
library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)
(默认为oob=censor
);参见?squish
,?censor
:groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tUcoord_cartesian
方法也是如此吗?coord_cartesian(xlim =
重置ylim
,并重置标签和网格分隔符。