3

我在闪亮的仪表板上有两个情节。当我点击第一个情节图时,交互式事件工作正常。但是当我在第二个图(堆叠条形图)上执行相同的操作时,窗口会自动关闭。

您是否遇到过带有多个情节的闪亮仪表板?如果是,如何处理不同情节图上的点击事件?


我正在准备可重现的用例。很快我会发布它。

library(shinydashboard)
library(plotly)
library(shiny)
library(dplyr)
library(ggplot2)

tg <- ToothGrowth
tg$dose <- factor(tg$dose)

skin <- Sys.getenv("DASHBOARD_SKIN")
skin <- tolower(skin)
if (skin == "")
  skin <- "blue"


sidebar <- dashboardSidebar(
  sidebarSearchForm(label = "Search...", "searchText", "searchButton"),
  sidebarMenu(
    menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard"))
  )
)

body <- dashboardBody(
  tabItems(
    tabItem("dashboard",
            fluidRow(
              box(
                title = "Distribution",
                status = "primary",
                plotlyOutput("plot1", height = "auto"),
                height = 500,
                width = 7
              ),
              box(
                height = 500, width = 5,
                title = "Dist",
                         plotlyOutput("click", height = 430)

              )
            )
  )
))


header <- dashboardHeader(
  title = "My Dashboard"
)

ui <- dashboardPage(header, sidebar, body, skin = skin)

server <- function(input, output, session) {

  output$plot1 <- renderPlotly({

    p <- ggplot(data = tg, aes(x=len, y=dose, col=supp, key=supp)) + geom_point()
    ggplotly(p)

  })

  output$click <- renderPlotly({
    d <- event_data("plotly_click")
    if (is.null(d)){
      "Click events appear here (double-click to clear)"
    } else {

      gSel <- tg %>% filter(dose %in% d$y) %>% group_by(supp) %>%  mutate(newLen=floor(len)) %>% 
        ggplot(aes(x=supp, fill=as.factor(newLen))) + geom_bar()
      ggplotly(gSel)

    }
  })

}

shinyApp(ui, server)

上面的代码产生: 在此处输入图像描述

如何避免上图中的可用错误?绘图输出区域中的文本打印。

第一个图用于迭代点击事件。当我单击一个点时y=1,它会产生第二个图 在此处输入图像描述

但是当我单击堆叠条时,第二个图丢失(在我的原始场景中,窗口关闭且不可见。要使用该应用程序,我需要重新运行该应用程序)。 在此处输入图像描述

如何接收点击事件并检查它是来自第一个情节还是第二个情节?

4

2 回答 2

1

仅针对错误抑制问题:- 在您的 ui 部分中输入

tags$style(type="text/css",
         ".shiny-output-error { visibility: hidden; }",
         ".shiny-output-error:before { visibility: hidden; }"

)

对于图形问题。我有同样的

于 2018-07-19T10:20:48.930 回答
1

我也使用plotly_click事件,方法是在图中添加源参数

p <- plot_ly(source = paste('plotlyplot', plot.list, sep = ''))

并观察点击事件并在那里分配数据

observeEvent(event_data("plotly_click", source = "plot1"), { 
     values$plot.click.results <- event_data("plotly_click", source = "plot1") 
})

对于您的场景,根据第一个图的点击事件渲染第二个图:如果您尝试在点击事件数据为零时渲染一个图,并且您在您的示例中尝试绘制一条文本消息,那么 R 可以不要用文字来制造情节。而是以如下方式构建它:如果单击事件数据为 NULL,则输出为 renderText,如果不为 NULL,则为 renderPlotly

于 2017-12-27T17:55:51.093 回答