如何使用ggplot2不对称地扩展轴而不手动设置限制?

hat*_*rix 10 r ggplot2

我希望条形图的底部轴为零,但顶部扩展了一小部分(根据某种比例).但是,我正在绘制输出,stat_summary所以我没有可用的最大值,我正在使用facet scale="free_y"所以我无法手动设置它们.否则我会使用baptiste的添加技巧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")
Run Code Online (Sandbox Code Playgroud)

Ros*_*tev 9

你可以通过创建一个包含自定义类的比例并实现内部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
}
Run Code Online (Sandbox Code Playgroud)

这也是覆盖默认比例的示例.现在,要获得所需的结果,请指定展开

qplot(1:10, 1:10) + scale_y_continuous(expand=list(c(0,0.1), c(0,0)))
Run Code Online (Sandbox Code Playgroud)

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

  • 它对我来说不起作用,版本2.0.0的ggplot.我得到`diff(范围)中的错误*mul:二元运算符的非数字参数 (3认同)
  • @YvanR对于`ggplot2` v2解决方案,请参阅/sf/ask/2423664631/(目前有一项拉取请求,用于添加对非对称范围扩展的支持). (2认同)