当前位置: 首页 > 知识库问答 >
问题:

点击传单地图上的点,在闪亮中生成ggplot

仲孙翔飞
2023-03-14

使用在R中的闪亮,我试图创建一个传单地图,允许用户点击任何标记来生成一个相应的图,代表该特定地点的信息(温度)。

我结合了这个问题的代码(点击传单地图中的点作为shiny中一个情节的输入)和这个博客上的第二个技巧(https://www.r-bloggers.com/4-tricks-for-working-with-r-faillet-and-shiny/),但似乎仍然不能成功地在shiny中注册点击的标记点。

也就是说,当我点击任何网站时,没有任何情节。

我无法找到任何解决方案的基础上进一步的研究,任何帮助是感激的。

library(leaflet)
library(shiny)
library(ggplot2)

# example data frame 
wxstn_df <- data.frame(Site = c("a", "a", "b"), Latitude = c(44.1, 44.1, 37), Longitude = c(-110.2, -110.2, -112.7), Month = c(1,2,1), Temp_avg = c(10, 18, 12))

ui <- fluidPage(column(7, leafletOutput("wsmap", height = "600px")),
  column(5, plotOutput("plot", height = "600px"))
)

server <- function(input, output) {

  # create a reactive value to store the clicked site
  stn <- reactiveValues(clickedMarker = NULL)

  ## leaflet map
  output$wsmap <- renderLeaflet({
    leaflet() %>% 
      addTiles() %>% 
      addCircleMarkers(data = wxstn_df, ~unique(Longitude), ~unique(Latitude), layerId = ~unique(Site), popup = ~unique(Site)) 
  })

 # store the click
  observeEvent(input$map_marker_click, {
    stn$clickedMarker <- input$map_marker_click
  })

output$plot <- renderPlot({
      ggplot(wxstn_df[wxstn_df$Site %in% stn$clickedmarker$Site,], aes(Month, Temp_avg)) +
        geom_line()
  }) 
}

shinyApp(ui, server)

共有1个答案

庄子平
2023-03-14

这里有一个解决方案:

library(leaflet)
library(shiny)
library(ggplot2)

# example data frame 
wxstn_df <- data.frame(Site = c("a", "a", "b"), Latitude = c(44.1, 44.1, 37), Longitude = c(-110.2, -110.2, -112.7), Month = c(1,2,1), Temp_avg = c(10, 18, 12))

ui <- fluidPage(column(7, leafletOutput("wsmap", height = "600px")),
                column(5, plotOutput("plot", height = "600px"))
)

server <- function(input, output) {

  ## leaflet map
  output$wsmap <- renderLeaflet({
    leaflet() %>% 
      addTiles() %>% 
      addCircleMarkers(data = wxstn_df, ~unique(Longitude), ~unique(Latitude), layerId = ~unique(Site), popup = ~unique(Site)) 
  })

  # generate data in reactive
  ggplot_data <- reactive({
    site <- input$wsmap_marker_click$id
    wxstn_df[wxstn_df$Site %in% site,]
  })

  output$plot <- renderPlot({
    ggplot(data = ggplot_data(), aes(Month, Temp_avg)) +
      geom_line()
  }) 
}

shinyApp(ui, server)

主要的问题是您没有更改您所使用的示例中的对象名称,例如input$wsmap_marker_click,因为wsmap是您的传单ID的名称。类似地,要访问站点信息,请使用input$wsmap_marker_click$id而不是input$wsmap_marker_click$Site。在reactive函数中打印对象通常是有用的,这样可以查看输入对象的外观以及如何访问它的部分。

例如。

   # generate data in reactive
  ggplot_data <- reactive({
    print(input$wsmap_marker_click)
    site <- input$wsmap_marker_click$id
    print(site)

    data <- wxstn_df[wxstn_df$Site %in% site,]
    print(data)
    data})

就个人而言,在这种情况下,我更喜欢使用一个反应表达式,从标记点击生成ggplot数据(ggplot_data()),而不是创建reactiveValues对象。每次单击标记时,绘图将使用新的ggplot_data()进行更新。

证明它有效:

 类似资料:
  • 如前所述,我使用的是闪亮的仪表板。传单地图在放大时不呈现。代码是这样的。它在给定的lat,long上绘制标记。当放大时,它不工作。并且在放大时看起来是静态的,不进行渲染。需要尽快帮助。 server.r UI.R(只是一段很重要的代码)

  • 在页面上有两个框 这两个框是一个数组的数据类似与 [ 这种格式的我去循环然后画的框 想要实现无论点击这两行哪行 这两行都高亮显示 用过根据id查找页面元素,但id只能返回第一个所以只能第一个高亮

  • 我有一张地图,上面有很多自定义的大标记。现在,我希望允许用户在地图上创建路径(显示为折线,稍后保存为地理坐标对列表)。 如果用户单击地图,我可以使用地图的setOnMapClickedListener方法收集这些位置。但是如果用户点击一个标记(setOnMarkerClickedListener),我只能检索标记的位置(通常是标记的ancor的位置)。

  • 我在某个地方读到,我们可以添加另一个带有突出显示点的数据集,并增加其圆圈大小。如果我的荧光笔会来回拖动,并且我必须频繁地更新新的数据集,那么这真的是一个好方法吗?

  • 嗨,我有问题,如何实现点击标记的信息窗口?问题是我在地图上有很多标记,如果单击信息窗口,每个标记都有另一个活动<代码>在此处输入代码 以下是示例 标记1----- 我尝试了很多代码但没有解决

  • 我需要一些帮助来绘制我正在绘制的地图。地图并不特别复杂,因为我是一个初学者,我有一堆带有信息窗口的标记(完成后还会有更多标记),单击标记或选择页面HTML端下拉菜单的相应项时可以打开这些标记。 当信息窗口打开时(在HTML菜单中单击或选择),我想做但自己找不到的是在地图上自动居中标记。我假设有某种函数可以分配给click或infowindow打开事件,但无法确定是哪种函数以及如何实现它。 我的代码