2015-11-06 31 views
3

我想點擊一個Leaflet多邊形,讓TabPanel在Shiny中更改。我對如何做到這一點有幾點想法,但是我找不到實現它們所需的信息。我在tabPanel中有傳單,但是我想在點擊多邊形時切換到另一個選項卡。我想製作popup=updateTabsetPanel(session="New Tab"),但這並不奏效。我的另一個想法是在用戶點擊一個新的多邊形時調用updateTabsetPanel(session="New Tab"),但我不知道我需要返回什麼事件才能讓它知道點擊了一個新的多邊形,或者即使彈出了一個新的彈出窗口。有人知道嗎?如何在R中按下傳單彈出時創建事件?

回答

8

下面是當你點擊一個多邊形,更新的反應函數的例子:

output$myMap <- renderLeaflet({ 
    map_out() #this is just a function that returns a leaflet map 
    }) 


output$MyGraph <- renderPlot({ 
    event <- input$myMap_shape_click #Critical Line!!! 

    ... #Code to run here 

    GraphData <- GraphData[event$id] # subsetting example 

    } 
    }) 

有幾件事情,這裏要注意:

  1. input$myMap_shape_click變化根據你所說的地圖以上。我稱之爲myMap,所以結構如圖所示。如果您使用output$YourMap進行初始化,則點擊將被調用input$YourMap_shape_click

  2. 您點擊的多邊形的ID可以通過event$id訪問。這對基於單擊的多邊形進行子集+繪圖非常有用。還可以訪問的是event$latevent$lng

  3. renderPlot可以是任何反應函數。如果它不與特定的輸出關聯,則可以按如下方式使用observe。這樣,只要點擊一個多邊形,代碼就會運行。這是因爲每次點擊時input$myMap_shape_click的值都會更改。

我沒有用之前updateTabsetPanel,但我想這將工作:

observe({ 

    event <- input$myMap_shape_click 

    updateTabsetPanel(session, "inTabset", selected = event$id) 

}) 

這將選項卡切換到面板相同的ID您單擊的多邊形。

相關問題