如何解决闪亮的绘图输出中的选择性 y 变量
我试图在一个闪亮的应用程序中包含一个情节图,其中 y 变量由用户选择。我最初将 ggplot2 和 plotly 一起使用,我拥有的代码对此非常有效。但是因为数据点的数量非常多,加载绘图需要几分钟,所以我尝试切换到绘图只是因为我读了一些可以让它更快的地方。不幸的是,我无法让 y 变量选择起作用。
我已经尝试了此处给出的建议:Change plotly chart y variable based on selectInput 和此处:Error: invalid first argument with R Shiny plot,但它们都不起作用。在这一点上,我已经尝试了很多我不记得详细的事情,但基本上我要么在使用 yvar <- get(input$yvariable1)
的一些变体然后在 plot 函数中包含 ~yvar 时得到错误“无效的第一个参数”,要么当它是 y = ~input$yvariable1
时,我收到“错误:无法在符号上设置属性”。当我使用 y = newdata[,input$yvariable1]
时,一些东西被绘制出来,但它完全错误(轴的比例高达 50k 或其他东西而不是 10 并且分布也不正确 - 基本上它看起来不像我通过简单输入绘制它相同的 y 变量非反应性)。
我的代码如下 - 在 UI 中:
uIoUtput("ySelection1")
在服务器中:
function(input,output) {
output$ySelection1 <- renderUI({
varSelectInput("yvariable1","Y Variable:",df[,c('PO_count_citing','cpc_3digits_count_citing','cpc_4digits_count_citing')],selected='PO_count_citing')
})
yvar1 <- eventReactive(input$yvariable1,{input$yvariable1})
output$plot1 <- renderPlotly({
newdata <- subset(df,Technology == input$type & appln_auth%in%input$PO)
validate(no_data(nrow(newdata)))
#yvar <- get(yvar1()) (Failed attempt at making this work)
#yvar <- get(input$yvariable1) (another Failed attempt)
scatterPlot <- plot_ly(newdata,x = ~appln_filing_year,y = ~input$yvariable1,type="scatter",mode="markers",# Hover text:
text = ~paste(some text),color = ~appln_auth)
})
}
但我无法让它工作。在原始 ggplot2 版本中,它输入为 aes(x = appln_filing_year,y = !!yvar1(),bla bla)
但是!!甚至一个!或删除 yvar1 之后的括号都在 plotly 中引发错误。
大家有什么建议吗?
解决方法
这是一个使用 get
的简单示例:
library(shiny)
library(plotly)
DF <- setNames(data.frame(rep(1:20,5),mapply(runif,min = 1:5,max = 2:6,MoreArgs = list(n = 20))),c("x",paste0("y",1:5)))
library(shiny)
ui <- fluidPage(
plotlyOutput("myPlot"),selectInput("yvariable","Select the Y variable",1:5))
)
server <- function(input,output,session) {
output$myPlot <- renderPlotly({
req(input$yvariable)
plot_ly(data = DF,x = ~x,y = ~get(input$yvariable),type = "scatter",mode = "markers")
})
}
shinyApp(ui,server)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。