gpt4 book ai didi

r - 使用 ggplot2、aes_string 和 reorder 制作绘图函数

转载 作者:行者123 更新时间:2023-12-01 14:05:41 24 4
gpt4 key购买 nike

我正在尝试创建一个将在内部使用 ggplot2aes_stringreorder 的函数,但到目前为止还没有成功。

基本上,如果我们有如下示例数据集:

library(ggplot2)
library(dplyr)

set.seed(123)
dt <- data.frame(
id = c(1,1,1,2,2),
a = c("b", "d", "c", "a", "b"),
b = sample(1:10, 5, replace = F),
cat = c(1,1,2,2,2)) %>%
mutate(a = as.factor(a)) %>%
as_tibble()

我希望该函数接受以下参数:数据集、过滤变量和两个用于绘图的变量。

这是我设法做到的:

myplot <- function(df, filtval, var1, var2) {
data <- df %>% filter(id == filtval)

ggplot(data) +
geom_point(
aes_string(
x = reorder(var1, var2),
y = var2)
)
}

不幸的是,运行时返回错误:

myplot(dt, 1, "a", "b")
Warning message:
In mean.default(X[[i]], ...) :
argument is not numeric or logical: returning NA

这就是我希望函数执行的操作:

data <- dt %>% filter(id == 1)
ggplot(data) +
geom_col(aes(x = reorder(a, - b), y = b))

最佳答案

使用最新版本的 ggplot,您应该使用 aes!!sym() 将字符串转换为符号。

myplot <- function(df, filtval, var1, var2) {
data <- df %>% filter(id == filtval)

ggplot(data) +
geom_point(
aes(
x = reorder(!!sym(var1), !!sym(var2)),
y = !!sym(var2))
)
}

关于r - 使用 ggplot2、aes_string 和 reorder 制作绘图函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53676021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com