adl*_*adl 2 r function ggplot2 dplyr
我试图让将要使用的功能ggplot2
中,aes_string
并reorder
但至今没有运气。
基本上,如果我们有一个如下所示的示例数据集:
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()
Run Code Online (Sandbox Code Playgroud)
我希望该函数接受以下参数:数据集、过滤变量和用于绘图的两个变量。
这就是我设法做的:
myplot <- function(df, filtval, var1, var2) {
data <- df %>% filter(id == filtval)
ggplot(data) +
geom_point(
aes_string(
x = reorder(var1, var2),
y = var2)
)
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当运行它返回错误:
myplot(dt, 1, "a", "b")
Warning message:
In mean.default(X[[i]], ...) :
argument is not numeric or logical: returning NA
Run Code Online (Sandbox Code Playgroud)
这就是我希望函数执行的操作:
data <- dt %>% filter(id == 1)
ggplot(data) +
geom_col(aes(x = reorder(a, - b), y = b))
Run Code Online (Sandbox Code Playgroud)
使用最新版本的 ggplot,您应该使用aes
with!!
和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))
)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
442 次 |
最近记录: |