动态ggplot函数,按中位数排序

时间:2018-11-08 16:39:40

标签: r ggplot2

这很好:

test <- function(x, y) {
    ggplot(iris, aes_string(x = x, y = y)) +
    geom_boxplot() +
    xlab(x) +
    coord_flip()
}

test('Species', 'Sepal.Width')

但这不是:

test <- function(x, y) {
    ggplot(iris, aes_string(x = reorder(x, y, FUN = median), y = y)) +
    geom_boxplot() +
    xlab(x) +
    coord_flip()
}

test('Species', 'Sepal.Width')

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

aes_string仅包含字符串,而不包含reorder之类的函数。使用最新的ggplot2,您可以使用ensym将字符串转换为可以与aes()而不是aes_string一起使用的sumbols

test <- function(x, y) {
  ggplot(iris, aes(x = reorder(!!ensym(x), !!ensym(y), FUN = median), y = !!ensym(y))) +
    geom_boxplot() +
    xlab(x) +
    coord_flip()
}

test('Species', 'Sepal.Width')