动态地理信息可视化——散点地图系列
这是一篇拖了好久的稿子,因为过年玩high了,一直放着没写,今天得空,赶快得空,赶紧整理一下。
本篇主讲leaflet在线地图系列中的散点系列,包含颜色映射规则(离散和连续)、大小映射规则。
其实也就是包含了我们看到的常规的散点图类型和气泡图类型。同时结合leaflet丰富多彩的背景地图主题进行展开。
#加载包:
library(plyr)
library(maps)
library(mapdata)
library(leaflet)
library(stringi)
library(maptools)
library(htmltools)
library(RColorBrewer)
library(ggplot2)
为方便展示这里统一使用中国省级行政地图(shp格式导入),在省会城市坐标进行指标数据映射。
地图素材数据导入:
province_city <- read.csv("c:/rstudy/chinaprovincecity.csv") #中国各省省会坐标
province_city$size<-round(runif(34,5,10),2) #添加连续数值变量
province_city$type<-factor(sample(LETTERS[1:5],34,replace=TRUE)) #添加因子变量以便之后演示
co<-substr(rainbow(34),1,7)
province_city<-data.frame(province_city,co)
制作色盘:
pal <- colorFactor(c("green", "red","yellow","green","blue"), domain = c("A", "B","C","D","E"))#因子变量的映射色盘
cPal <- colorNumeric(palette = c("blue","yellow","red"),domain =province_city$size) #数值型变量的映射色盘
作图函数:
leaflet(province_city)%>%addTiles()%>% addMarkers(lng=~jd,lat=~wd,popup=~city)
leaflet(province_city)%>%addTiles()%>% addCircles(lng=~jd,lat=~wd,color="red",weight=~size,popup=~city)
leaflet(province_city)%>%addTiles()%>% addCircleMarkers(lng=~jd,lat=~wd,radius=~size, color = ~co, fill=TRUE,popup=~city)
离散标度映射:
leaflet(province_city)%>%addTiles()%>% addCircles(lng=~jd,lat=~wd,color = ~pal(type),weight=~size,popup=~city)%>%
addLegend("bottomright",pal=pal,values = ~type,title = "GDP等级",labFormat = labelFormat(suffix = "档"),opacity=1)
leaflet(province_city)%>%addTiles()%>% addCircleMarkers(lng=~jd,lat=~wd,color = ~pal(type),radius = ~size,fill=TRUE,popup=~city)
addLegend("bottomright",pal=pal,values = ~type,title = "GDP等级",labFormat = labelFormat(suffix = "档"),opacity=1)
连续标度映射:
leaflet(province_city)%>%addTiles()%>%
addCircles(lng=~jd,lat=~wd,fillColor=~cPal(size),weight=~size,stroke=FALSE,fillOpacity=0.8,popup=~city)%>%
addLegend("bottomright",pal=cPal,values = ~size,title = "GDP等级",labFormat = labelFormat(suffix = "档"),opacity=1)
leaflet(province_city)%>%addTiles()%>%
addCircleMarkers(lng=~jd,lat=~wd,fillColor=~cPal(size),radius = ~size,stroke=FALSE,fillOpacity=0.8,popup=~city)%>%
addLegend("bottomright",pal=cPal,values = ~size,title = "GDP等级",labFormat = labelFormat(suffix = "档"),opacity=1)
几种常见的地图风格主题效果:
默认点形状与几种常见的地图主题风格搭配效果:
leaflet(province_city)%>%addProviderTiles("Esri.WorldStreetMap")%>%addMarkers(lng=~jd,lat=~wd,popup=~city)
leaflet(province_city)%>%addProviderTiles("Esri.WorldImagery")%>%addMarkers(lng=~jd,lat=~wd,popup=~city)
leaflet(province_city)%>%addProviderTiles("Esri.WorldTerrain")%>%addMarkers(lng=~jd,lat=~wd,popup=~city)
leaflet(province_city)%>%addProviderTiles("Esri.NatGeoWorldMap")%>%addMarkers(lng=~jd,lat=~wd,popup=~city)
#####################################################################
实心点形状与几种常见的地图主题风格搭配效果:
leaflet(province_city)%>%addProviderTiles("Esri.WorldStreetMap")%>%addCircles(lng=~jd,lat=~wd,color="red",weight=~size,popup=~city)
leaflet(province_city)%>%addProviderTiles("Esri.WorldImagery")%>%addCircles(lng=~jd,lat=~wd,color="red",weight=~size,popup=~city)
leaflet(province_city)%>%addProviderTiles("Esri.WorldTerrain")%>%addCircles(lng=~jd,lat=~wd,color="red",weight=~size,popup=~city)
leaflet(province_city)%>%addProviderTiles("Esri.NatGeoWorldMap")%>%addCircles(lng=~jd,lat=~wd,color="red",weight=~size,popup=~city)
#####################################################################
带轮廓的点形状与几种常见的地图主题风格搭配效果:
leaflet(province_city)%>%addProviderTiles("Esri.WorldStreetMap")%>%addCircleMarkers(lng=~jd,lat=~wd,radius=~size,color=~co,fill=TRUE,popup=~city)
leaflet(province_city)%>%addProviderTiles("Esri.WorldImagery")%>%addCircleMarkers(lng=~jd,lat=~wd,radius=~size,color=~co,fill=TRUE,popup=~city)
leaflet(province_city)%>%addProviderTiles("Esri.WorldTerrain")%>%addCircleMarkers(lng=~jd,lat=~wd,radius=~size,color=~co,fill=TRUE,popup=~city)
leaflet(province_city)%>%addProviderTiles("Esri.NatGeoWorldMap")%>%addCircleMarkers(lng=~jd,lat=~wd,radius=~size,color=~co,fill=TRUE,popup=~city)
可选择的地图类型:
addProviderTiles("Esri.WorldStreetMap") #浅色
addProviderTiles("Esri.WorldImagery") #深色深色卫星云图
addProviderTiles("Esri.WorldTerrain") #亮白色
addProviderTiles("Esri.NatGeoWorldMap") #深沉轮廓色
addProviderTiles("Stamen.Toner") #Third-Party Tiles
addProviderTiles("Acetate.terrain") #
addProviderTiles("CartoDB.Positron")
addProviderTiles("Stamen.TonerLabels") #
本篇点形状是可以支持自定义的,需要使用网络图标资源,但是鉴于步骤和实用性,就此略过,如果感兴趣,可以私下探讨。
我是分割线〜
欢迎关注魔方学院QQ群