gpt4 book ai didi

r - 如何在ggplot中使用带有准引号的cut_width?

转载 作者:行者123 更新时间:2023-12-04 12:21:46 25 4
gpt4 key购买 nike

我想把这段代码变成一个函数:

diamonds %>%
ggplot() +
geom_boxplot(aes(x = carat, y = price, group = cut_width(carat, 0.1)))

代码输出: The resulting ggplot

我的尝试是:

pair_relationship_plot = function(df, x, y) {
quo_x = enquo(x)
quo_y = enquo(y)

df %>%
ggplot(aes_(x = quo_x, y = quo_y)) +
geom_boxplot(aes_(group = cut_width(enquo(x), 0.1)))
}

pair_relationship_plot(diamonds, carat, price)

然而,geom_boxplot() 中的 cut_width 给我 Error in cut_width(enquo(x), 5) : 'pairlist' object cannot be coerced to type 'double'

如果我将代码更改为 cut_width(~x, 0.1),它仍然会产生相同的错误。

如何使该功能按预期工作?

最佳答案

如果您接受函数的输入是字符串,您可以通过将 aes_string 函数与 ggplot2 一起使用来轻松完成此操作,该函数接受美学字符串。下面的函数做你想要的

make_boxplot = function(df, x_ax, y_ax){
group_text = paste0("cut_width(",x_ax,", 0.1)")

df %>%
ggplot(aes_string(x=x_ax, y=y_ax)) +
geom_boxplot(aes_string(group = group_text))
}

获得与示例图相同输出的函数调用是make_boxplot(diamonds, "carat", "price")

或者,如果您想节省一些击键次数并且真的不想为您的函数输入字符串,您可以在函数内部使用 deparse(substitute())。即

make_boxplot = function(df, x_ax, y_ax){
x_ax=deparse(substitute(x_ax))
y_ax=deparse(substitute(y_ax))
group_text = paste0("cut_width(",x_ax,", 0.1)")

df %>%
ggplot(aes_string(x=x_ax, y=y_ax)) +
geom_boxplot(aes_string(group = group_text))
}

现在您只需调用 make_boxplot(diamonds, carat, price)

关于r - 如何在ggplot中使用带有准引号的cut_width?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51016086/

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