按下R中的传单弹出窗口时如何创建事件?

时间:2015-11-06 20:36:58

标签: r maps shiny leaflet rstudio

当我点击Leaflet多边形时,我想让TabPanel在Shiny中更改。关于如何做到这一点,我有几点想法,但我无法找到实现它们所需的信息。我在tabPanel中有传单,但我想在单击多边形时切换到另一个选项卡。

    leaflet(llmap) %>%
      addTiles() %>%
      addPolygons(stroke = F,
                  fillOpacity = .8,
                  smoothFactor = .5,
                  color=~pal(x),
                  popup = pop)

我想过制作popup=updateTabsetPanel(session="New Tab"),但这不起作用。我的另一个想法是在用户点击新的多边形时随时调用updateTabsetPanel(session="New Tab"),但我不知道我需要返回什么事件才能让它知道点击了一个新的多边形,或者即使是新的多边形弹出窗口弹出。有谁知道这个?

1 个答案:

答案 0 :(得分: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. 调用点击
  3. 可以使用event$id访问您单击的多边形的ID。这对于基于单击的多边形进行子集化+图形化非常有用。 event$latevent$lng

  4. 也可访问
  5. renderPlot可以是任何反应函数。如果它与特定输出无关,您可以使用observe,如下所示。这样,只要单击多边形,您的代码就会运行。这是因为每次点击都会更改input$myMap_shape_click的值。

  6. 我之前没有使用updateTabsetPanel,但我想这会有用:

    observe({
    
      event <- input$myMap_shape_click
    
      updateTabsetPanel(session, "inTabset", selected = event$id)
    
    }) 
    

    会将标签切换到与您单击的多边形具有相同ID的面板。