Я пытаюсь создать функцию, которая будет использовать 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()
Я хочу, чтобы функция принимала следующие аргументы: набор данных, фильтрующую переменную и две переменные для построения графика.
Это то, что мне удалось сделать:
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))