为什么我必须在闪亮的 ggplot 中使用 aes_string()?
Why do I have to use aes_string() with ggplot in shiny?
我是 shiny 的新手,我正在尝试制作 ggplot。根据我的阅读,我必须使用 aes_string
而不是 aes()
,但我仍在尝试找出原因。
我的代码:
output$scatterplot <- renderPlot({
ggplot(data = movies, aes_string(x = input$x, y = input$y,
color = input$z)) +
geom_point(alpha = input$alpha)
})
我们以mtcars
数据为例
通常你称ggplot2
为:
library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp,color = am)) + geom_point()
请注意,您将 mpg
、disp
和 am
作为裸列名称而不是字符串传递。当您在 shiny 中接受用户输入时,您会得到这些字符串。因此,如果您不使用 aes_string
,那么您所调用的是:
ggplot(data = mtcars, aes(x = "mpg", y = "disp",color = "am")) + geom_point()
这不是你想要的。因此,通过使用 aes_string
你“告诉”R/Shiny 我将列名作为字符串传递,但将它们视为数据框中的列而不是字符串。
另请注意,aes_string
已 soft-deprecated,建议使用 .data
进行整洁评估,如@Phil 所述。
ggplot(data = mtcars,
aes(x = .data[["mpg"]], y = .data[["disp"]],color = .data[["am"]])) +
geom_point()
其他选项包括:
sym
与 !!
:
ggplot(data = mtcars,
aes(x = !!sym("mpg"), y = !!sym("disp"),color = !!sym("am"))) +
geom_point()
get
:
ggplot(data = mtcars,
aes(x = get("mpg"), y = get("disp"),color = get("am"))) +
geom_point()
我是 shiny 的新手,我正在尝试制作 ggplot。根据我的阅读,我必须使用 aes_string
而不是 aes()
,但我仍在尝试找出原因。
我的代码:
output$scatterplot <- renderPlot({
ggplot(data = movies, aes_string(x = input$x, y = input$y,
color = input$z)) +
geom_point(alpha = input$alpha)
})
我们以mtcars
数据为例
通常你称ggplot2
为:
library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp,color = am)) + geom_point()
请注意,您将 mpg
、disp
和 am
作为裸列名称而不是字符串传递。当您在 shiny 中接受用户输入时,您会得到这些字符串。因此,如果您不使用 aes_string
,那么您所调用的是:
ggplot(data = mtcars, aes(x = "mpg", y = "disp",color = "am")) + geom_point()
这不是你想要的。因此,通过使用 aes_string
你“告诉”R/Shiny 我将列名作为字符串传递,但将它们视为数据框中的列而不是字符串。
另请注意,aes_string
已 soft-deprecated,建议使用 .data
进行整洁评估,如@Phil 所述。
ggplot(data = mtcars,
aes(x = .data[["mpg"]], y = .data[["disp"]],color = .data[["am"]])) +
geom_point()
其他选项包括:
sym
与!!
:
ggplot(data = mtcars,
aes(x = !!sym("mpg"), y = !!sym("disp"),color = !!sym("am"))) +
geom_point()
get
:
ggplot(data = mtcars,
aes(x = get("mpg"), y = get("disp"),color = get("am"))) +
geom_point()