前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言可视化——中心放射状路径图

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

作者头像
数据小磨坊
发布2018-04-11 15:42:40
1.3K0
发布2018-04-11 15:42:40
举报
文章被收录于专栏:数据小魔方

最近一直在研究ggplot剩余还没有涉略过的图表类型,试图挖掘出一些新的图表形式,就像是该包的作者所暗示的那样,ggplot2只是给你搭建了一个图层语法环境,至于具体能创造出何种图形,全凭自己的想象力。

慢慢的我发现还有一类geom_segment对象自己一直没有尝试过,于是满心欢喜的尝试了一下,果然还是有收获的,我发现通过这个segment图层,可以批量的创建放射状线条图,也就是路径图,这解决了我一直以来的难题,今天顺便分享给大家。

加载包:

library(ggplot2) library(ggmap) library(plyr) library(maptools)

加载中国省份行政地图:

china_map<-readShapePoly("c:/rstudy/bou2_4p.shp") x <- china_map@data xs <- data.frame(id=row.names(x),x)

转换为数据框并合并城市数据:

china_map1 <- fortify(china_map) china_map_data <- join(china_map1, xs, type = "full") mydata <- read.csv("c:/rstudy/geshengzhibiao.csv") china_data <- join(china_map_data, mydata, type="full") province_city <- read.csv("c:/rstudy/chinaprovincecity.csv")

拆分兰州数据:

newdata<-subset(province_city,city=="兰州") newdata1<-subset(province_city,city!="兰州") sourcex<-rep(newdata$jd,33) sourcey<-rep(newdata$wd,33)

制作以兰州为中心的点对点作图数据:(可以类比之前REmap路径图数据源)

tagetx<-newdata1$jd tagety<-newdata1$wd dataA<-data.frame(sourcex,sourcey,tagetx,tagety) dataB<-newdata1[,1:2] dataC<-cbind(dataB,dataA) dataC$point<-round(runif(33,10,50))

利用geom_segment()图层制作放射路径图:

ggplot()+ geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+ geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+ coord_map("polyconic") + geom_segment(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"))+ theme_nothing()

这里再稍微的扩展一下,其实以上你看到的放射状线条是兰州与其他城市之间的直线,之所以变的有弧度,只是因为加了地图投影的缘故,这里我可以取消投影参数,看下效果。

ggplot()+ geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+ geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+ geom_segment(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"))+ theme_nothing()

这里取消投影参数之后,线条变成了点间直线,但是默认的不带投影的地图看起来与我们认知中的中国地图形状有些不一样,好像被压扁了一样。

其实这里还有一个图层函数也可以做出来这种放射状线条,geom_curve(),图层,不过它本身就是有弧度的曲线,曲率可以通过参数进行微调。

ggplot()+ geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+ geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+ geom_curve(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"))+ theme_nothing()

曲率调整:

ggplot()+ geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+ geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+ geom_curve(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"),curvature = 0.8)+ #用于调整曲率,范围在-1~1之间。 theme_nothing()

ggplot()+ geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+ geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+ geom_curve(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"),curvature =-0.5)+ theme_nothing()

当然,通过图形叠加,我们还可以重复多次这样的放射状线条图。

以下以北京为例:

newdataA<-subset(province_city,city=="北京") newdataB<-subset(province_city,city!="北京") soux<-rep(newdataA$jd,33) souy<-rep(newdataA$wd,33) tagx<-newdataB$jd tagy<-newdataB$wd dataD<-data.frame(soux,souy,tagx,tagy) dataE<-newdataB[,1:2] dataF<-cbind(dataD,dataE) dataF$point<-round(runif(33,10,50))

两个中心的路径图(兰州、北京)

ggplot()+ geom_polygon(data=china_data,aes(x=long,y=lat,group=group),fill="white",colour="grey60")+ coord_map("polyconic") + geom_segment(data=dataC,aes(x=sourcex,y=sourcey,xend=tagetx,yend=tagety,colour="red"))+ geom_segment(data=dataF,aes(x=soux,y=souy,xend=tagx,yend=tagy,colour="blue"))+ geom_point(data =province_city,aes(x=jd,y=wd),colour="red")+ theme_nothing()

当然,根据实际需要,你也可以将图层叠加N次,从而制作出与业务需求一致的多中心放射状路径图,这里只给出思路和大致步骤,感兴趣的小伙伴可以自己尝试。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据小魔方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档