4

plotly_clickイベントを使用して別のプロットをオプションで表示する基本的な光沢のあるアプリのコードを次に示します。ページ内の側面ではなく、モーダルポップアップでサイドボックスプロットをレンダリングしたいと思います。

library(shiny)
library(plotly)

df1 <- data.frame(x = 1:10, y = 1:10)
df2 <- data.frame(x = c(rep('a', 10), rep('b', 10)),
                  y = c(rnorm(10), rnorm(10, 3, 1)))

ui <- fluidPage(
  column(6, plotlyOutput('scatter')),
  column(6, plotlyOutput('box'))
)

server <- function(input, output) {
  output$scatter <- renderPlotly({
    plot_ly(df1, x = x, y = y, mode = 'markers', source = 'scatter')
  })

  output$box <- renderPlotly({
    eventdata <- event_data('plotly_click', source = 'scatter')
    validate(need(!is.null(eventdata),
                  'Hover over the scatter plot to populate this boxplot'))


    plot_ly(df2, x = x, y = y, type = 'box')
  })
}

shinyApp(ui = ui, server = server)

この質問 ( Shiny: plot results in popup window ) と応答に従うことができ、 の で使用しようとしましたtriggerplotly_click成功しませんでした。プロットのホバークリックイベントで同じことをやってのける方法はありますか?

更新:このコードで示されているように、モーダル ポップアップ ウィンドウplotlyでプロットをレンダリングできることがはっきりとわかります。shinyBS

df1 <- data.frame(x = 1:10, y = 1:10)
ui <- fluidPage(
  actionButton('go', 'Click Go'),
  bsModal('plotlyPlot', 'Here is a Plot', 'go', plotlyOutput('scatter1'))
)

server <- function(input, output) {
  output$scatter1 <- renderPlotly({
    plot_ly(df2, x = x, y = y, mode = 'markers', source = 'scatter1')
  })
}

shinyApp(ui = ui, server = server)

actionButtonトリガーとしての代わりに、 plotly_clickorplotly_hoverが必要です (元の例では)。

4

2 に答える 2

6

を使用できますtoggleModal。これをサーバーに追加するだけです。

observeEvent(event_data("plotly_click", source = "scatter"), {
 toggleModal(session, "boxPopUp", toggle = "toggle")
})

box Plot を bsModal に入れます (タイトルとトリガーは空です):

ui <- fluidPage(
  column(6, plotlyOutput('scatter')),
  bsModal('boxPopUp', '', '', plotlyOutput('box'))
)

更新:シャイニー ビルトイン モーダル機能 (シャイニー 0.14 以降) では、サーバーの追加のみが必要です。

 observeEvent(event_data("plotly_click", source = "scatter"), {
                showModal(modalDialog(
                        renderPlotly({
                                plot_ly(df2, x = ~x, y = ~y, type = 'box')
                        })
                ))
        })
于 2016-09-15T09:19:12.970 に答える