gpt4 book ai didi

r - 使用为绘图创建的函数时 facet_grid() 出错

转载 作者:行者123 更新时间:2023-12-02 08:03:28 24 4
gpt4 key购买 nike

我创建了一个用于在 R 中返回绘图的函数。使用创建的绘图函数绘图时出现的 facet_grid() 似乎有问题,但在不使用该函数时不会出现(即使我使用了确切的相同的代码行)。

# function for plotting
barplot_fill <- function(dataset, x, y, fill, jaar) {
p <- ggplot(dataset, aes(x=x, y=y, fill=fill)) +
geom_bar(stat = "identity") +
facet_grid(~ jaar) +
theme_bw() +
scale_y_continuous(labels=comma)

return(p)
}

我想绘制以下数据框中的变量:

df <- data.frame(V1=c(1,2,3,4), V2=c(20,25,46,13), V3=c('a','a','b','b'), V4=c(2018,2019,2018,2017))

调用该函数时,出现以下错误:

barplot_fill(df, V1, V2, V3, V4)

Error: At least one layer must contain all faceting variables: dataset$jaar. * Plot is missing dataset$jaar * Layer 1 is missing dataset$jaar

当我不调用创建的函数而只​​是使用 ggplot 代码行创建绘图时,R 会创建绘图并且不会出现错误。

ggplot(df, aes(x=V1, y=V2, fill=V3)) +
geom_bar(stat = "identity") +
theme_bw() +
facet_grid(~ V4) +
scale_y_continuous(labels=comma)

我不明白为什么它会在创建的函数中给我一个错误,以及为什么在不使用该函数时运行完全相同的代码行时不会出现错误。谁能解释一下为什么在调用创建的函数时会出现错误?

最佳答案

问题是 jaar未在 facet_grid 调用中评估,但 ggplot 正在寻找 jaar您提供的数据集中的列。实际上,类似的事情发生在 ggplot 中。 -调用x , y , 和 fill如果你删除 fact_grid部分功能:

barplot_fill_no_facet <- function(dataset, x, y, fill, jaar) {
p <- ggplot(dataset, aes(x = x, y = y, fill = fill)) +
geom_bar(stat = "identity") +
theme_bw() +
scale_y_continuous()

return(p)
}

barplot_fill_no_facet(df, V1, V2, V3, V4)

Error in FUN(X[[i]], ...) : object 'V1' not found

一种解决方案使用 aes_stringformula对于 facet_grid :

barplot_fill <- function(dataset, x, y, fill, jaar) {
p <- ggplot(dataset, aes_string(x = x, y = y, fill = fill)) +
geom_bar(stat = "identity") +
facet_grid(formula(paste("~", jaar))) +
theme_bw() +
scale_y_continuous()

return(p)
}

barplot_fill(df, "V1", "V2", "V3", "V4")

enter image description here

关于r - 使用为绘图创建的函数时 facet_grid() 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54287127/

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