2016-09-30 3 views
1

Ich versuche festzustellen, angeklickt Land in einer Weltkarte in glänzend angezeigt.Nicht angezeigte Länder in Plotly shift event_data return (Glänzend)

I verwendet this example for click event und this one for display und dieser Code funktioniert:

library(shiny) 
library(plotly) 
library(countrycode) 

df <- countrycode_data[,c("iso3c", "country.name")] 
df <- df[complete.cases(df),] 
df$random <- rnorm(dim(df)[1]) 

shinyApp(
    ui = shinyUI(fluidPage(plotlyOutput("plot"), textOutput("text"))), 

    server = shinyServer(function(input, output) { 
    output$text <- renderPrint({ 
     d <- event_data("plotly_click") 
     ifelse(is.null(d), 
       "No selection", 
       as.character(df[as.numeric(d[2])+1,"country.name"])) 
     }) 

    output$plot <- renderPlotly({plot_ly(df, z=~random, locations=~iso3c, 
            text=~country.name, type="choropleth")}) 
    })) 

Wenn ich auf klicken Afghanistan, die das erste Land des Datensatzes ist, wählt er es richtig

Aber wenn ich auf Albanien das ist das dritte, es gibt Aland-Inseln zurück, das das zweite ist und das von Plotly nicht angezeigt wird.

So vermute ich, dass die Auswahl auf einer Liste der angezeigten Einträge berechnet wird, die ich auf dem Original-Datensatz Projekt

(die alle Länder umfasst) I auf Github die Länderliste von Plotly verwendet erfolglos zu finden versucht, , die ich verwenden könnte, um unbekannte Länder zu entfernen und die Schicht zu reparieren.

+0

[country] (https://github.com/vincentarelbundock/countrycode) ziemlich nett ist. – alistaire

+0

Dank @alistaire, aber es enthält auch Amerikanisch-Samoa (ASM) und Andorra (AND) – HubertL

+0

, die es gut behandelt. – alistaire

Antwort

0

Eine Umgehungslösung besteht darin, eine Länderliste wie die im Paket countrycode enthaltene zu verwenden und sie grafisch darzustellen und dann jedes Land zu entfernen, das (derzeit) nicht von plotly bearbeitet wird. Dies gab mir diese Liste der ISO-Codes zu entfernen:

CountriesNotInPlotly <- structure(list(
iso3c = c("ALA", "ASM", "AND", "AIA", "ATA", "ATG", 
"ABW", "BHR", "BRB", "BMU", "BES", "BIH", "BVT", "IOT", "CPV", 
"CYM", "CAF", "CXR", "CCK", "COM", "COD", "COG", "COK", "CUW", 
"CSK", "DMA", "FLK", "FRO", "GUF", "PYF", "DDR", "GIB", "GRD", 
"GLP", "GUM", "GGY", "HMD", "VAT", "HKG", "IMN", "JEY", "KIR", 
"LIE", "MAC", "MDV", "MLT", "MHL", "MTQ", "MUS", "MYT", "FSM", 
"MCO", "MSR", "NRU", "ANT", "NIU", "NFK", "MNP", "PLW", "PCN", 
"REU", "BLM", "SHN", "KNA", "LCA", "MAF", "SPM", "VCT", "WSM", 
"SMR", "STP", "SYC", "SGP", "SXM", "SGS", "SJM", "TKL", "TON", 
"TTO", "TCA", "TUV", "UMI", "VGB", "VIR", "WLF", "YMD", "YUG", 
"EAZ")), .Names = "iso3c", row.names = c(NA, -88L), class = "data.frame")