将outputId传递给ggplotly()

时间:2017-05-30 08:10:23

标签: r ggplot2 shiny rstudio plotly

我刚刚开始实习,我的第一个任务是通过将所有现有的ggplot图更新为Plotly图来改进Shiny应用程序。我对R和Shiny很陌生,所以我有几个问题要开始。

目前,本应用程序中的一个图表生成如下:

    output$barBoxPlot <- renderUI({
      plotOutput("Barplot", width = 700, height = 300
                 , click = "plot_click"
                 , hover = "plot_hover"
                 , brush = "plot_brush")
    })

哪里&#34; Barplot&#34;是一个outputId,对应于在代码的另一部分中生成的ggplot图。

我尝试使用ggplotly()函数绘制此图(&#34; Barplot&#34;)作为Plotly图,使用如下内容:

output$barBoxPlot <- renderPlotly({
    ggplotly(<insert graph here>)
})

然而,我无法弄清楚如何传入&#34; Barplot&#34;参数(是一个outputId)到ggplotly()中。 ggplotly接受ggplot图的实例,而不是outputId。

有没有办法将outputId传入ggplotly()?

谢谢!

1 个答案:

答案 0 :(得分:0)

是否会将此置于评论中但由于声誉而无法做到:

尝试将outputID传递给ggplotly()时,有多种方法可以解决这个问题。

  1. reactive中的output$Barplot <- renderPlot(this_reactive_here()),直接使用ggplotly()(如果您不需要原始output$barBoxPlot
  2. 创建一个带有ggplot对象的函数或被动对象return(ggplotly(x)),然后将其放入renderPlotly()
  3. 编辑以澄清2:

    Barplot中的plotOutput应该有一个类似于此的服务器条目:

    output$Barplot <- renderPlot({
      ggplot(data, aes(...)) # etc
    })
    

    将代码放入内部并将其置于反应中,如下所示:

    barplot_ggplot <- reactive({
      ggplot(data, aes(...)) # etc
    })
    

    然后,您可以在output$Barplot中使用barplot_ggplot(),将renderPlotly()中的ggplotly(barplot_ggplot())用作const getValue = input => input.target.value const my_filter = stream => stream.filter(text => text.length > 3) const filteredInputValue = ($input) => { my_filter($input.asEventStream('input').map(getValue)) const stream1 = filteredInputValue($('#input1')).log() const stream2 = filteredInputValue($('#input2')).log()

    我希望有点清楚。