闪亮的绘图输出中的选择性 y 变量

Posted

技术标签:

【中文标题】闪亮的绘图输出中的选择性 y 变量【英文标题】:Selective y variable in shiny plotly output 【发布时间】:2021-05-25 23:43:54 【问题描述】:

我试图在一个闪亮的应用程序中包含一个情节图,其中 y 变量由用户选择。我最初使用 ggplot2 和 plotly 一起使用,并且我的代码可以正常工作。但是因为数据点的数量很大,所以该图需要几分钟才能加载,所以我尝试切换到 plotly 只是因为我在某个地方读到了它,这使它更快。不幸的是,我无法让 y 变量选择起作用。

我已经尝试过这里给出的建议:Change plotly chart y variable based on selectInput 和这里:Error: invalid first argument with R Shiny plot,但它们都不起作用。在这一点上,我已经尝试了很多我不记得详细的事情,但基本上我要么在使用 yvar <- get(input$yvariable1) 的某些变体时得到错误“无效的第一个参数”,然后在绘图函数中包含 ~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 之后的括号都会在情节中引发错误。

有人有什么建议吗?

【问题讨论】:

试试y = ~.data[[as.name(input$yvariable1)]] 嗨,YBS,谢谢!我试过了,但没有找到错误对象'.newdata'。当我删除 .它虽然有效! 【参考方案1】:

这是一个使用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", paste0("y", 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)              

【讨论】:

谢谢!我尝试应用它,但收到错误“无效的第一个参数”。 你能分享一个可重现的例子吗?

以上是关于闪亮的绘图输出中的选择性 y 变量的主要内容,如果未能解决你的问题,请参考以下文章

仅当绘图类型是条形图时才显示这些面板。 R 闪亮

不允许从闪亮的输出对象中读取对象?

如何在闪亮或 flexdahsboard 中制作用户选择的变量图表?

如何在闪亮中使用 lapply 存储输出?

R中闪亮的反应选择输入

使用 ggplot facets 时增加闪亮的绘图大小