2017-08-22 66 views
0

我在閃亮的儀表板中有兩個劇情陰謀。當我點擊第一個情節圖時,交互式事件工作正常。但是當我在第二塊圖上進行同樣的操作時,這個窗口會自動關閉。R閃亮的錯誤:如何處理兩個劇情圖的點擊事件?

您是否遇到過帶有多個陰謀情節的閃亮儀表盤?如果是的話,如何處理不同情節劇情的點擊事件?


我準備重複使用的用例。很快我會發布它。

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) 

以上代碼生成: enter image description here

如何避免上述圖像中可用的錯誤?在繪圖輸出區域中打印文本。

第一個圖用於迭代點擊事件。當我點擊y=1一個點,它產生的第二個情節 enter image description here

但是當我點擊堆疊欄上,第二個情節變得缺少 (我在原來的方案中,窗口關閉,不可見的。要使用應用程序,我需要重新運行應用程序)。 enter image description here

如何接收點擊事件並檢查它是來自第一個情節還是第二個情節?

回答

0

我用plotly_click事件來說,要做到的方式,它是一個soucre參數添加到該地塊

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