2016-06-10 10 views
1

Ich versuche eine interaktive Choropleth in einer Shiny-Anwendung in R zu entwickeln. Ich habe es mit Plotly, gVis und rCharts versucht, aber immer noch ohne Glück. Ich muss es jetzt für Schweden visualisieren, aber wahrscheinlich brauche ich es später auch für andere Länder. Das ist, was ich bisher für gvisGeoMap haben:Interaktive Choropleth in R Schweden

polygons <- readOGR("/ggshape", layer="SWE_adm1") 
polygons <- fortify(polygons, region="ID_1") 
data.poly <- as.data.frame(polygons) 
data.poly <- data.poly[,c(1,2)] 
data.poly.final <- data.frame(locationvar = paste(data.poly[,2],data.poly[,1], sep = ":"), 
           numvar=1, 
           hovervar="test") 

data.poly.final$locationvar <- as.character(data.poly.final$locationvar) 
data.poly.final$hovervar <- as.character(data.poly.final$hovervar) 


map <- gvisGeoMap(data=data.poly.final, locationvar = "locationvar", 
        options=list(width='800px',heigth='500px',colors="['0x0000ff', '0xff0000']", 
           dataMode = "markers")) 
plot(map) 

auf der Dokumentations-Based sollte ich in der Lage sein lattitude und Länge verwenden Koordinaten als ich hier versuchen, aber ich habe nicht erfolgreich noch gewesen. Die Shapefile, die ich verwende, ist von http://www.gadm.org/download

Grundsätzlich weiß jemand, wie man eine interaktive Visualisierung mit Shapefiles von gadm.org zu arbeiten?

Dies ist, wie ich es mit ggplot tun würde

 SWE <- fortify(polygons, region="ID_1") 
     SWEplot <- merge(x=SWE, y=my_data, by="id") 

     p <- ggplot() + 
      geom_polygon(data = SWEplot , aes(x = long, y = lat, group = group, fill = Patients)) + 
      geom_path(color="black") + 
      theme(axis.ticks.y = element_blank(),axis.text.y = element_blank(), # get rid of x ticks/text 
       axis.ticks.x = element_blank(),axis.text.x = element_blank(), # get rid of y ticks/text 
       plot.title = element_text(lineheight=.8, face="bold", vjust=1), 
       panel.background = element_blank(), panel.grid.major = element_blank(), 
       panel.grid.minor = element_blank(), 
       legend.text=element_text(size=14), 
       legend.title=element_text(size=16)) + # make title bold and add space 
      coord_equal(ratio=1) 

Welche

enter image description here

Wie gewünscht, aber ohne die Interaktivität erzeugt. Was ich im Wesentlichen zu erreichen hoffe, ist so etwas wie http://rcharts.io/viewer/?6735051#.V1px-7t97mE, aber natürlich für Schweden.

Antwort

4

library(raster) 
swe <- getData("GADM", country = "SWE", level = 1) 
swe$Patients <- runif(1:nrow(swe)) 

Angenommen, Sie könnten zum Beispiel tun

library(maptools) 
library(rgeos) 
library(broom) 
library(ggplot2) 
library(plotly) 
swe_s <- gSimplify(swe, .01) 
SWE <- fortify(swe_s, region="ID_1") 
SWEplot <- merge(x=SWE, y=swe, by.x="id", by.y="ID_1") 
ggplot() + 
    geom_polygon(data = SWEplot , aes(x = long, y = lat, group = group, fill = Patients)) + 
    coord_quickmap() + 
    ggthemes::theme_map() + theme(legend.position=c(.8, .2)) -> 
    p 
ggplotly(p) 

enter image description here

oder

library(leaflet) 
pal <- scales::seq_gradient_pal(low = "#132B43", high = "#56B1F7", space = "Lab")(seq(0, 1, length.out = 255)) 
leaflet() %>% 
    addPolygons(
    data = swe, 
    color = "#000", weight = 1, opacity = 0.5, 
    fillColor = ~colorNumeric(pal, swe$Patients)(Patients), fillOpacity = 1, 
    popup = with([email protected], htmltools::htmlEscape(sprintf("%s: %s", NAME_1, Patients))) 
) 

enter image description here

+0

Dies ist genau das, was ich gesucht habe. Ich habe ziemlich oft gebraucht, um herauszufinden, warum die Leaflet-Map in meiner Shiny-App nicht dargestellt wird. Es stellt sich heraus, dass es einige Konflikte zwischen Leaflet und rCharts/NVD3 gibt, die ich lösen musste, bevor es funktionierte. Aber jetzt tut es! Vielen Dank. – marcopah

1

Bei einem SpatialPolygosDataFrame von getData könnten Sie library(mapview) verwenden den Rest für Sie zu tun:

library(raster) 
library(mapview) 

swe <- getData("GADM", country = "SWE", level = 1) 

mapview(swe) 

Um zu steuern, welches Attribut gezeichnet werden soll, verwenden Sie das Argument zcol.