Используйте bsModal в пакете блестящей BBS с графиком R plotly_click для создания нового графика во всплывающем окне.

Вот мой код для основного блестящего приложения, использующего 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: результаты графика во всплывающем окне) и ответом, и попытался использовать его с trigger из plotly_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_click или же plotly_hover как там триггер (в оригинальном примере).

2 ответа

Решение

Ты можешь использовать toggleModalПросто добавьте это на свой сервер:

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

и поместите поле Plot в bsModal (заголовок и триггер пусты):

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

ОБНОВЛЕНИЕ: с блестящей встроенной модальной функциональностью (начиная с Shiny 0.14) требуется только добавление сервера:

 observeEvent(event_data("plotly_click", source = "scatter"), {
                showModal(modalDialog(
                        renderPlotly({
                                plot_ly(df2, x = ~x, y = ~y, type = 'box')
                        })
                ))
        })

Использование CSS

Ты можешь использовать HTML builder содержать графики и использовать таблицу стилей для добавления динамических эффектов.

ui <- fluidPage(
  includeCSS(path_to_css_file),
  div( class='mainchart',
    column(6, plotlyOutput('scatter')),
    div(  class='popup',
        column(6, plotlyOutput('box'))
       )
    )
)

CSS

div.popup {
   display : none;
   position: absolute;
}
div.mainchart : focus > div.popup {
   display : block;
}
div.mainchart {
   position: relative;
}

Используя Javascript

Вы можете использовать plotly embeded-API, чтобы установить видимость вашей боковой рамки.

shinyBS

Поскольку вы хотите придерживаться блестящей BBS, вы можете использовать bsPopover Функция с небольшим трюком. Я полагаю, вы уже знаете, как использовать bsModel что похоже на пример ниже.

Передайте следующий аргумент fluidPage

bsTooltip(id, title, placement = "bottom", trigger = "click", content=column(6, plotlyOutput('box'))  )

Это создаст сюжет с Popover wraper. Я еще не проверял это. В случае ошибки вы также можете попробовать

options = list()
options$content = column(6, plotlyOutput('box'))
options$html = T # otherwise the conent will be converted to text
bsTooltip(id, title, placement = "bottom", trigger = "click",  options=options  )

Посетите этот файл с исходным кодом блестящей BBS и функцию popover(параметры) bootstrap для получения дополнительной информации.

Другие вопросы по тегам