【问题标题】:How to set limits for axes in ggplot2 R plots?如何在 ggplot2 R 图中设置轴的限制?
【发布时间】:2011-04-06 02:56:03
【问题描述】:

我绘制了以下内容:

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

我该怎么做?

【问题讨论】:

    标签: r plot ggplot2


    【解决方案1】:

    基本上你有两个选择

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

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

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

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

    + xlim(-5000, 5000)
    

    更多信息请查看coord_cartesian的描述。

    ggplot2RStudio cheatsheet 在视觉上非常清楚。这是该备忘单的一小部分:

    分布于CC BY

    【讨论】:

    • 现在还有library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)(默认为oob=censor);见?squish?censorgroups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
    • 注意。如果您正在处理某些顶点超出限制的线/多边形,这可能会出现问题,因为整个对象都已从图中删除
    • @geotheory:coord_cartesian 方法也是如此吗?
    • 不,我应该更具体,只是第一种方法
    • 实际上,出于“打印”目的,使用coord_cartesian(xlim = ,您可能还需要重置ylim,并重置标签和网格中断。
    【解决方案2】:

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

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

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

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

    【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多