2016-06-10 2 views
1

Я пытаюсь разработать интерактивный choropleth в блестящем приложении в R. Я пробовал с сюжетным, gVis и rCharts, но все равно без везения. Мне нужно визуализировать его сейчас для Швеции, но, вероятно, мне это понадобится и для других стран, а позже. Это то, что я до сих пор для gvisGeoMap:Интерактивный Choropleth в R Швеции

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) 

На основе документации, я должен быть в состоянии использовать Lattitude и долготы, как я пытаюсь здесь, но я не был успешным еще. Форм-файл, который я использую, от http://www.gadm.org/download

В принципе, кто-нибудь знает, как получить интерактивную визуализацию для работы с шейп-файлами с gadm.org?

Это, как я хотел бы сделать это с ggplot

 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) 

который производит

enter image description here

По желанию, но без интерактивности. То, что я, по сути, надеюсь достичь, это что-то вроде этого http://rcharts.io/viewer/?6735051#.V1px-7t97mE, но для Швеции конечно.

ответ

4

Учитывая

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

вы могли бы сделать, например,

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

или

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

Это именно то, что я искал. Я использовал некоторое время, чтобы понять, почему карта Leaflet не будет отображаться в моем приложении Shiny. Оказывается, есть некоторые конфликты между Leaflet и rCharts/NVD3, которые я должен был решить до его разработки. Но теперь это так! Спасибо. – marcopah

1

Учитывая SpatialPolygosDataFrame от getData вы могли бы использовать library(mapview) делать все остальное за вас:

library(raster) 
library(mapview) 

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

mapview(swe) 

Для управления атрибутом на сюжет используйте аргумент zcol.