【问题标题】:How to expand axis asymmetrically with ggplot2 without setting limits manually?如何在不手动设置限制的情况下使用 ggplot2 不对称地扩展轴?
【发布时间】:2014-03-18 12:55:25
【问题描述】:

我希望条形图的底部轴为零,但顶部扩展了少量(根据某种比例)。但是,我正在绘制stat_summary 的输出,所以我没有可用的最大值,并且我使用带有scale="free_y" 的构面,所以我无法手动设置它们。否则我会使用baptiste's trick of adding geom_blank。我知道我可以读取这些值并手动创建一个具有上限的数据框,但是可以在无需硬编码限制的情况下进行设置吗?

另一种选择是在函数调用之外计算均值,并在不调用 stat_summary 的情况下绘制它(这样我就可以直接为每个方面设置上限),但是有什么办法可以解决这个问题吗?

例子:

ggplot(mtcars)+
  stat_summary(aes(cyl,mpg),
               fun.y="mean",
               geom="bar")+
  scale_y_continuous(expand=c(0,0))+
  facet_grid(carb~.,"free_y")

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您可以通过使用自定义类创建比例并实现内部 S3 方法 scale_dimension 来“扩展”ggplot,如下所示:

    library("scales")
    scale_dimension.custom_expand <- function(scale, expand = ggplot2:::scale_expand(scale)) {
      expand_range(ggplot2:::scale_limits(scale), expand[[1]], expand[[2]])
    }
    
    scale_y_continuous <- function(...) {
      s <- ggplot2::scale_y_continuous(...)
      class(s) <- c('custom_expand', class(s))
      s
    }
    

    这也是覆盖默认比例的示例。现在,要获得所需的结果,您可以像这样扩展

    qplot(1:10, 1:10) + scale_y_continuous(expand=list(c(0,0.1), c(0,0)))
    

    其中列表中的第一个向量是乘法因子,第二个是加法部分,每个向量的第一个(第二个)元素对应于下(上)边界。

    【讨论】:

    • 它对我不起作用,ggplot 版本为 2.0.0。我得到Error in diff(range) * mul : non-numeric argument to binary operator
    • @YvanR 对于ggplot2 v2 解决方案,请参阅stackoverflow.com/questions/34623780/…(目前有一个请求请求添加对非对称范围扩展的支持)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多