r - 为什么我必须在闪亮的 ggplot 中使用 aes_string()?
问题描述
我是闪亮的新手,我正在尝试制作一个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
作为裸列名称传递,而不是作为字符串传递。当您在闪亮中获取用户输入时,您将获得这些作为字符串。因此,如果您不使用aes_string
您所称的内容:
ggplot(data = mtcars, aes(x = "mpg", y = "disp",color = "am")) + geom_point()
这不是你想要的。因此,通过使用aes_string
您“告诉”R/Shiny 我将列名作为字符串传递,但将它们视为数据框中的列而不是字符串。
另请注意,它aes_string
已被软弃用,建议使用.data
@Phil 提到的 tidy 评估。
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()
推荐阅读
- python - 每次使用opencv-python运行代码时,如何将面保存在单独的文件中
- python - 如何使用 python 处理 selenium 中的身份验证弹出窗口?
- node.js - vm runInNewContext 在使用模块 _compile 时不执行代码
- java - CompletableFuture.runAsync(task) 和 Platform.runLater(()->new Thread(task).start()) 是否具有相同的行为?
- swiftui - 如何根据日期显示不同的视图
- c++ - break 语句没有退出循环
- scala - 在启动主逻辑之前处理 Actor 需求
- mqtt - Mosquitto bridge CPU消耗随时间增加
- asp.net - Asp.Net:在 Application_End 上发送 SignalR 消息
- ios - 无法传输工件 com.mobidevelop.robovm