使用在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)
这里有一个解决方案:
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打开事件,但无法确定是哪种函数以及如何实现它。 我的代码