2016-12-13 8 views
0

私は光沢のあるアプリを構築していますが、プロットマップのイベントデータに問題があります。私は過去にプロットした散布図を作成し、plot_ly関数内で 'キー'変数を定義しました。散布図のポイントをクリックすると、キーが抽出され、キーはデータフレームのサブセットに使用され、後続のプロットが生成されます。私は以下のコードで同じ書式を使用していますが、キーはイベントデータに格納されていません。イベントデータには 'curveNumber'と 'pointNumber'のみが含まれます。ここにあるchoroplethマップのために働くようです:https://plot.ly/r/shinyapp-map-click/しかし、私はそれを 'scattergeo'のために働かせることはできません。plotly(scattergeo)のイベントデータが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のイベントデータのキーは20ではなく '2'を返し、id 35では '35'ではなく3を返します。それはあなたのためにも起こりますか?なぜそれが第1桁だけを返すのか分かりません。 – SoloAus

+0

これはhttps://github.com/ropensci/plotly/issues/505に関連している可能性があります。あなたの例では、id = 35をid = 40に置き換えると、そのキーに4が与えられます。 2番目のユニットが切断されたようです。 – MLavoie