在其他 ggplot 函数中使用提供给 aes_string() 的变量

Use variables supplied to aes_string() in other ggplot functions

我在函数中使用 aes_string() 来创建一些图表。我正在使用 cowplot 进行主题化,这会将轴缩放到所提供数据的最大值,在最大值处切断点的顶部或侧面,如下例所示。

因此我想将 5% 添加到列的最大数据以添加一点 space。如果我不写一个函数,我可以做类似

的事情
scale_y_continuous(expand = c(0,0), 
                       limits = c(0, max(y_var) *  1.05))

但是,我不知道如何使用 aes_string() 执行此操作。谁能解释一下如何使用 aes_string()?

library(cowplot)
library(ggplot2)

fig_fun <- function(data, var){
  ggplot(data, aes_string(x = "wt", y = var)) + 
    geom_line() + 
    geom_point() +
    scale_y_continuous(expand = c(0,0), 
                       limits = c(0, NA))
}

data("mtcars")
p <- fig_fun(data = mtcars, var = "mpg")
p

您可以从 expand_limits 中的数据中提取 y 变量并将其缩放 5%:

expand_limits(y = c(0, max(data[, var])*1.05))

这使得:

fig_fun <- function(data, var){
  ggplot(data, aes_string(x = "wt", y = var)) + 
    geom_line() + 
    geom_point() +
    expand_limits(y = c(0,max(data[, var])*1.05))) # picking the var column here
}

您将需要一个额外的 + scale_y_continuous(expand = c(0, 0)) 来绝对限制这些数字。

但正如其他人所建议的那样,如果您使用 scale_y_continuousexpand 参数的默认值,您会得到想要的结果。 所以 scale_y_continuous(expand = c(0, 0.1)) 会给你 10% 的额外 space 从两边的 y 轴边界。文档是 here.

如果您想要更多自定义解决方案,expand_limits 方法仍然有用。