Вот решение:
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)
Основная проблема заключается в том, что вы не меняли имена объектов из примера, который вы использовали, например введите $ wsmap_marker_click, потому что wsmap - это имя вашего идентификатора листовки. Аналогично, для доступа к информации о сайте используйте вход $ wsmap_marker_click $ id, а не вход $ $ wsmap_marker_click. Часто полезно напечатать объекты внутри реактивной функции, чтобы изучить, как выглядит входной объект и как получить к нему доступ.
например.
# 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 ()) из щелчка маркером, а не для создания объекта реактивного значения. Каждый раз, когда нажимается маркер, график обновляется новым ggplot_data ().
И доказательство того, что это работает: