2016-12-13 10 views
0

Я строю блестящее приложение, и у меня возникают проблемы с данными о событиях карты. В прошлом я создал заговорную диаграмму рассеяния и определил переменную «ключ» в функции plot_ly. Если бы я нажал на точку в диаграмме рассеяния, ключ был бы извлечен, и ключ будет использоваться для подмножества данных и создания последующего графика. Я следую тому же формату в коде ниже, но ключ не сохраняется в данных события. Данные события содержат только «curveNumber» и «pointNumber». Кажется, что работает на карте choropleth, найденной здесь: https://plot.ly/r/shinyapp-map-click/, но я не могу заставить ее работать для «рассеивания».Данные о событиях для плоских (рассеянных) карт в R Shiny

Любая помощь была бы принята с благодарностью.

library(shiny) 
library(plotly) 

ui <- shinyUI(fluidPage(

    titlePanel("My Shiny App"), 
    sidebarLayout(
    sidebarPanel(
     numericInput("idnum", label = h3("ID #"), 
        value = 3) 
    ), 
    mainPanel(
     plotlyOutput("map"), 
     verbatimTextOutput("click") 
    ) 
) 
)) 

server <- shinyServer(function(input, output) { 

    output$map <- renderPlotly({ 

    df <- data.frame(id = c(3,6,20,35), lat = c(30.67,32.46,37.83,29.62), lon = c(-97.82, -62.34, -75.67, -85.62)) 

    sub <- df[which(df$id == input$idnum),] 

    g <- list(
     scope = 'north america', 
     showland = TRUE, 
     landcolor = toRGB("grey83"), 
     subunitcolor = toRGB("white"), 
     countrycolor = toRGB("white"), 
     showlakes = TRUE, 
     lakecolor = toRGB("white"), 
     showsubunits = TRUE, 
     showcountries = TRUE, 
     resolution = 50, 
     projection = list(
     type = "miller", 
     rotation = list(lon = -100) 
    ), 
     lonaxis = list(
     showgrid = TRUE, 
     gridwidth = 0.5, 
     range = c(-140, -55), 
     dtick = 5 
    ), 
     lataxis = list(
     showgrid = TRUE, 
     gridwidth = 0.5, 
     range = c(20, 60), 
     dtick = 5 
    ) 
    ) 

    plot_ly(sub, lon = ~lon, lat = ~lat, key = ~id, text = ~paste(id), hoverinfo = "text", 
      marker = list(size = 10), 
      type = 'scattergeo', 
      locationmode = 'USA-states') %>% 
     layout(title = 'Locations', geo = g) 
    }) 

    output$click <- renderPrint({ 
    d <- event_data("plotly_click") 
    if (is.null(d)) "Click events appear here" else d 
    }) 
}) 

shinyApp(ui = ui, server = server) 

ответ

0

Обходной, чтобы получить ключ, чтобы заменить:

sub <- df[which(df$id == input$idnum),] 

с

sub <- df[which(df$id == input$idnum),] 
rownames(sub) <- sub$id 
key <- row.names(sub) 

это выглядит как key работает с rownames.

+0

Теперь я могу видеть ключ в данных события, когда я нажимаю на точку. Однако ключ в данных события для id 20 возвращает только «2» не 20, а для id 35 он возвращает 3, а не «35». Это происходит и для вас? Я понятия не имею, почему он только вернет 1-ю цифру. – SoloAus

+0

это может быть связано с https://github.com/ropensci/plotly/issues/505. В вашем примере, когда я заменяю id = 35 id = 40, для ключа указывается 4. Похоже, что второй блок отключен. – MLavoie