R语言地图可视化

https://zhuanlan.zhihu.com/p/28205002?utm_source=tuicool&utm_medium=referral

之前的ggplot2入门实践篇已经更新告一段落,也已经做了归总分类分享给大家。


最近翻看突然发现少了一个知识点,就是分面中没有讲填充多边形分面的应用,虽然其理念跟其他的常用图表类型一致。


但是鉴于多边形填充本身就比较复杂,再加上分面肯定能把大部分小伙伴儿绕晕,这里还是亲自实践一篇案例详细讲解一下实际用法。


如果你还不懂如何使用ggplot2制作数据地图的话,你可以参考以下序列文件:


地图部分(ggplot2)


你想要的地图素材资源,我都帮你整理好了~

一篇文章教你搞定JSON素材,从此告别SHP时代~

大道至简——论如何最优雅的操纵json地图数据

关于美国地图中的两个海外州坐标平移与原始投影问题~

R语言可视化——关于ggplot所支持的数据地图素材类型

一篇小短文助你打开数据可视化的任督二脉!

数据地图多图层对象的颜色标度重叠问题解决方案

ggplot2中如何自定义数据地图版面范围~

关于数据地图的几个遗留问题解决方案

R语言数据地图——美国地图

R语言数据地图——全球填色地图

数据地图系列7|R语言版(上)

数据地图系列8|R语言版数据地图(下)

R语言可视化——数据地图应用(东三省)

R语言可视化——数据地图离散百分比填充(环渤海)

R语言可视化——地图填充与散点图图层叠加

R语言可视化——多图层叠加(离散颜色填充与气泡图综合运用)

R语言可视化——地图与气泡图结合应用

用R语言复盘美国总统大选结果~

R语言可视化——ggplot绘制中心密度辐射图

R语言可视化——中心放射状路径图

你绝对想不到,数据地图还能这么玩~

玩转数据地图系列之——地图上的迷你条形图

一个小案例,教你如何从数据抓取、数据清洗到数据可视化

一篇全是代码的数据可视化案例

小魔方不想跟你说话,并向你扔了一堆代码~~~

地图可视化之——移花接木


为了演示方便,今天这篇使用纯模拟数据:


加载包:
library("ggplot2")
library("plyr")
library("ggthemes")
library("rgdal")
library("dplyr")

导入中国省界地图:

setwd("D:/R/rstudy/CHN_adm") 
china_map<-readOGR("bou2_4p.shp",stringsAsFactors=FALSE)
mydata<-china_map@data["NAME"]
mydata$id<-0:924;mydata[mydata$id==898,"NAME"]<-"澳门特别行政区"


mymapdata<-fortify(china_map)
mymapdata$id<-as.numeric(mymapdata$id)
mymapdata<-merge(mymapdata,mydata,all.x=TRUE)
mymapdata<- mymapdata %>%rename(region=NAME)


今天的目标是,使用一个省份12年份实践序列数据分别呈现填色散点气泡图、颜色填充图、以及组合图,形成3*4排列的数据地图分面,不是使用grid逐个打印单个地图,而是直接使用ggplot2的分面参数进行绘制。


考虑到如果使用传统的数据源格式(geom_polygeon制作填充图要求将指标数据与地理分界点数据合并,因为地理分界点数据有9万个,12个年份数据表宽转长之后会暴增到120万+,肯定会拖慢内存,所以今天使用geom_map函数进行颜色填充地图的绘制)。


以下是本案例步骤:


首先构造12个年份变量:
mydata_new<-data.frame(NAME=unique(mydata$NAME))
for (i in 2:13){
mydata_new[,i]<-round(runif(34,0,250))
}


定义并切割连续型数据为因子变量
names(mydata_new)[2:length(mydata_new)]<-as.character(2001:2012)
mydata_new<-mydata_new%>%tidyr::gather(year,zhibiao,-1)
mydata_new$fact<-cut(mydata_new$zhibiao,breaks=c(0,50,100,150,200,250),labels=c('0~50','50~100','100~150','150~200','200~250'),order=TRUE,include.lowest = TRUE)


以下是构图过程:

分面地图一(热力填色地图): 
ggplot(mydata_new,aes(map_id=NAME,fill=fact))+
geom_map(map=mymapdata,colour="grey65")+
scale_fill_brewer(palette="Blues") +  ###Blues&Greens
facet_wrap(~year)+
expand_limits(x=mymapdata$long,y=mymapdata$lat)+
coord_map("polyconic")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+       
theme_void()%+replace% theme(legend.position = c(0,0.7),legend.text.align=1)   



导入并合并省份行政中心经纬度数据
province_city <- read.csv("D:/R/rstudy/Province/chinaprovincecity.csv") 
province_city<-province_city%>%select(province,jd,wd)
mydata_new<-merge(mydata_new,province_city,by.x="NAME",by.y="province",all.x=TRUE)


分面地图二(填色气泡地图):
ggplot(mydata_new,aes(map_id=NAME))+
geom_map(map=mymapdata,colour="grey65",fill="#EEF3FA")+
geom_point(aes(x=jd,y=wd,size=zhibiao,colour=zhibiao),shape=16)+
scale_size_area(max_size=6) +  
scale_colour_gradient(low="white",high="#D73434")+ 
facet_wrap(~year)+
expand_limits(x=mymapdata$long,y=mymapdata$lat)+
coord_map("polyconic")+
guides(fill=guide_legend(reverse=TRUE,title=NULL),size=guide_legend(reverse=TRUE,title=NULL))+       
theme_void()%+replace% theme(legend.position = c(0,0.7),legend.text.align=1)   



分面地图三(填色气泡+热力填充地图): 
ggplot(mydata_new,aes(map_id=NAME))+
geom_map(map=mymapdata,aes(fill=fact),colour="white")+
geom_point(aes(x=jd,y=wd,size=zhibiao,colour=zhibiao),shape=16)+
scale_size_area(max_size=4) +  
scale_fill_brewer(palette="Greens") +  ###Blues&Greens
scale_colour_gradient(low="white",high="#D73434")+ 
facet_wrap(~year)+
expand_limits(x=mymapdata$long,y=mymapdata$lat)+
coord_map("polyconic")+
guides(fill=guide_legend(reverse=TRUE,title=NULL),size=guide_legend(reverse=TRUE,title=NULL))+       
theme_void()%+replace% theme(legend.position = c(0,0.7),legend.text.align=1)  



对你没有看错,ggplot2就是这么高端大气上档次,想不想学这种操作呀,9月12日晚八点,天善学院我们不见不散(悄悄地告诉你报名地址在阅读原文里)~_~


所需数据源请移步之本人GitHub下载,可以直接进入GitHub官网搜索ljtyduyu,也可以在后台回复任意内容,获取小魔方的GitHub主页数据获取地址。

  • 3
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于R语言地图数据可视化,您可以使用多种包来实现,其中最常用的是`ggplot2`和`leaflet`。 使用`ggplot2`包,您可以创建各种类型的地图,包括点、线、面等。首先,您需要准备地理数据,例如经纬度坐标或行政区划边界数据。然后,使用`ggplot()`函数创建一个基本的地图图层,并使用`geom_point()`、`geom_line()`或`geom_polygon()`函数添加相应的几何对象。最后,可以使用其他`ggplot2`函数来设置地图的样式和标注。 例如,下面的代码演示了如何使用`ggplot2`绘制一个简单的点地图: ```R library(ggplot2) # 创建一个数据框,包含经纬度坐标和相应的值 data <- data.frame( lon = c(-122.4194, -73.935242, 139.6917), lat = c(37.7749, 40.730610, 35.6895), value = c(10, 20, 30) ) # 创建地图基本图层 map <- ggplot(data, aes(x = lon, y = lat)) + geom_point(aes(size = value), color = "red") + coord_quickmap() # 显示地图 print(map) ``` 这将创建一个简单的点地图,其中三个点分别表示三个位置,并使用红色和大小来表示相应的值。 另外,如果您更喜欢交互式地图,可以使用`leaflet`包。`leaflet`提供了一套用于创建交互式地图的函数,您可以添加标记、弹出窗口、图层控制等。以下是一个使用`leaflet`包创建交互式地图的示例: ```R library(leaflet) # 创建一个基本的地图对象 map <- leaflet() %>% addTiles() %>% setView(lng = -95.7129, lat = 37.0902, zoom = 4) # 添加标记点 map <- map %>% addMarkers(lng = c(-122.4194, -73.935242, 139.6917), lat = c(37.7749, 40.730610, 35.6895), popup = c("San Francisco", "New York City", "Tokyo")) # 显示地图 print(map) ``` 这将创建一个基本的交互式地图,其中包含三个标记点,分别表示三个位置,并在点击时显示弹出窗口。 希望以上信息对您有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值