我希望条形图的底部轴为零,但顶部扩展了一小部分(根据某种比例)。但是,我正在绘制stat_summary
的输出,因此我没有可用的最大值,并且我使用scale="free_y"
的构面,因此我无法手动设置它们。否则我会使用baptiste's trick of adding geom_blank
。我知道我可以读取值并手动创建一个带有上限的数据框,但是这可以设置而不必硬编码限制吗?
另一种选择是计算函数调用之外的平均值,并且只是在不调用stat_summary
的情况下进行绘制(这样我就可以直接为每个方面设置上限),但有什么方法可以解决这个问题吗? / p>
示例:
ggplot(mtcars)+
stat_summary(aes(cyl,mpg),
fun.y="mean",
geom="bar")+
scale_y_continuous(expand=c(0,0))+
facet_grid(carb~.,"free_y")
答案 0 :(得分: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
}
这也是覆盖默认比例的一个示例。现在,要获得所需的结果,请指定展开,如此
qplot(1:10, 1:10) + scale_y_continuous(expand=list(c(0,0.1), c(0,0)))
其中列表中的第一个向量是乘法因子,第二个是加性部分,每个向量的第一个(第二个)元素对应于下(上)边界。