我绘制以下内容:

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

我该怎么办?

#1 楼

基本上,您有两个选择

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




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


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

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

+ xlim(-5000, 5000)


有关更多信息,请检查coord_cartesian的描述。

ggplot2的RStudio速查表从视觉上使这很清楚。以下是该备忘单的一小部分:



根据CC BY发布。

评论


现在还有图书馆(秤); ... + scale_x_continuous(limits = c(-5000,5000),oob = squish)(默认为oob = censor);参见?squish,?censor:groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU

–本·博克
13年11月2日在21:07



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

–地理理论
2014年9月5日上午11:35

@geotheory:coord_cartesian方法也是如此吗?

–尼克·斯陶纳(Nick Stauner)
14-10-16在2:03

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

–地理理论
14-10-16在8:30

实际上,出于“打印”目的,使用coord_cartesian(xlim =您可能还需要重设ylim并重设标签和网格中断。

–PatrickT
2015年10月17日下午13:30

#2 楼

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

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

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


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

评论


我类似但更难的问题在这里stackoverflow.com/questions/61531149/…关于如何仅限制一个侧面

– IVIM
4月30日19:22