2016-06-10 117 views
1

我正试图在R中的一个Shiny应用程序中开发一个交互式Choropleth。我已经尝试过使用gVis和rCharts,但仍然没有任何运气。我现在需要为瑞典想象它,但我可能稍后需要它为其他国家。这是我到目前为止的gvisGeoMap:瑞典R中的交互式Choropleth

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和经度坐标,因为我想在这里,但我还没有成功呢。我使用的shapefile是从http://www.gadm.org/download

基本上,有没有人知道如何获得一个交互式可视化工作与gadf.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

鉴于从getData一个SpatialPolygosDataFrame你可以使用library(mapview)为你做的其余部分:

library(raster) 
library(mapview) 

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

mapview(swe) 

要控制要绘制哪个属性,请使用zcol参数。