您的位置:首页 > 其它

R语言可视化——REmap动态地图

2018-02-10 00:00 507 查看

作者简介Introduction杜雨:EasyCharts团队成员,R语言中文社区专栏作者。
兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。
个人公众号:数据小魔方(微信ID:datamofang) ,“数据小魔方”创始人。
往期回顾一个文科小白的数据分析师之路
R语言数据抓取实战——RCurl+XML组合与XPath解析
左手用R右手Python系列之——表格数据抓取之道



今天开始,要跟着大家学习一个新的可视化R包——REmap包。
说起来,这个包要归功于百度的可视化开源项目——echarts,它是国内为数不多的高水平开源可视化js库,在业界地位首屈一指。经过大神的努力,我们终于可以在R语言中以简洁的REmap函数形式,来调用Echarts核心功能,而不用亲自去学js代码,就可以创建动态地图可视化作品。如果有小伙伴儿熟悉百度的大数据可视化项目——百度迁徙地图,以及交通通勤图,以及后来的一带一路可视化路线图,肯定对那些动态地图上流动的线条和路径有很深的印象。下面我们开始简单介绍REmap的主要功能:REmap包中涵盖有一组函数,我所知道并用过的有REmap、REmapB、REmapC、REmapH。每一个函数都对应着几种炫酷的动态效果类型:今天我们先介绍REmap函数并利用该函数制作简单的流向图:安装及加载:
install.packages("devtools")devtools::install_github("lchiffon/REmap")   #开发者/包名library(REmap)    #加载REmap函数的作图理念与ggplot其实还是有雷同的,它也是将数据信息和美学信息分开表达,数据信息包含在数据表中,而美化修饰参数都包含在theme内。remap(mapdata, title = " ", subtitle = "", theme = get_theme("Dark"))这是一个典型的REmap函数的结构,mapdata是我们所要展示的数据框格式数据集,里面包含了两列数据:起点位置、终点信息。title用于设置主标题、subtitle用于设置副标题。而theme用于设定整个图形的主题风格,该主题是一个封装的函数变量,里面包含诸多参数信息(各种点线面的颜色、度量等信息)。下面是一个典型的REmap主题内的参数示例:get_theme(theme = "Dark",                  lineColor = "Random",                  backgroundColor = "#1b1b1b",                  titleColor = "fff",                  borderCo
4000
lor = "rgba(100,149,237,1)",                  regionColor = "#1b1b1b",                  labelShow = T,                  pointShow = F,                  pointColor = "gold")参数说明:参数一:theme为总体配色,默认选项有“Dark”、“Bright”、“Sky”、“none”参数二:lineColor为线条颜色,默认是随机, 也可自行设置,如’red’参数三:backgroundColor为地图外背景颜色参数四:titleColor为标题颜色参数五:borderColor为地图中地域边缘颜色,不同省份、城市的边缘参数六:regionColor为地域颜色,即地图显示的颜色参数七:labelShow为逻辑参数,是否显示地域名称,默认为T,即显示,只用于remapC函数参数八:pointShow为逻辑参数,是否显示地域所在点,默认为F,不显示,只用于remapC函数参数九:pointColor为pointShow中点的颜色,只用于remapC函数REmap可以非常轻松的获取城市地点的经纬度数据:以大连为例:get_city_coord("大连")[1] 121.62139  38.91934如果想要获取一组城市的经纬度信息,可以直接赋值给城市向量:city_list <- c("beijing","tianjin","shenyang","dalian","zhengzhou")get_geo_position(city_list)       lon      lat      city1 116.4136 39.91101   beijing2 117.2059 39.09091   tianjin3 123.4390 41.81134  shenyang4 121.6214 38.91934    dalian5 113.6313 34.75349 zhengzhou而且据说这两个函数大部分时候对拼音与汉字,甚至拼音的大小写都不敏感,所以避免了很多麻烦。创建起始点:destination<- c("beijing","tianjin","shenyang","dalian","zhengzhou")    #终点origin<- rep("dalian",length(destination))        #起点
#合成数据框格式的起终点数据map_data<- data.frame(origin,destination)     数据预览:
head(map_data)  origin destination1 dalian     beijing2 dalian     tianjin3 dalian    shenyang4 dalian      dalian5 dalian   zhengzhou作图函数:map_out<-remap(mapdata=map_data,   #流向地图的数据源(依次为起点、重点两列)                title="我是标题",         #设置主标题                subtitle="我是副标题",    #设置副标题                theme =get_theme(theme="Bright")) #设置主题(默认主题一共有三套:“Dark”,“Bright,”Sky“)运行以上代码之后,动态图表已经生成名为map_out的对象,只需使用plot函数调用一下map_out图表对象就可以看到该动态图表效果。提示下,这里的map_out的对象是一个js代码生成的html对象,运行完plot之后,动态图表效果不是呈现在R的图表窗口而是调用了桌面浏览器的Web窗口。plot(map_out)Save img as: C:\Users\ADMINI~1\AppData\Local\Temp\RtmpAxQndv/ID_20161015191055_242761.html运行完成之后,浏览器窗口会自动呈现动态图表效果:


其实仔细看以上代码,与ggplot的地图代码相比,要简单很多,数据集也很简单(最重要的直接支持地点名称而不需要经纬度数据),当然这些便利性主要归功于它的底层代码是调用Echarts项目,地理位置信息有百度地图的强大系统支持。另外两个主题:Dark主题:map_out1<-remap(mapdata=map_data,title="我是标题",subtitle="我是副标题",theme =get_theme(theme="Dark"))plot(map_out1)


Sky主题:
map_out2<-remap(mapdata=map_data,title="我是标题",subtitle="我是副标题",theme =get_theme(theme="Sky"))
map_out<-remap(mapdata=map_data,                        title="我是标题",                        subtitle="我是副标题",                 theme =get_theme(theme="Bright"))plot(map_out2)


以上是该函数内置的三款主题,当然如果你要想自定义主题的话,也是可以的,但是需要将theme="Sky"设置为none,否则系统主题会覆盖掉你自定义的主题。map_out3<-remap(mapdata=map_data,     #设计流向地图title="我是标题",                    #设置标题subtitle="我是副标题",               #设置副标题theme=get_theme(theme="none",        #设置主题     lineColor="blue",                    #设置线条颜色backgroundColor="white",             #设置背景颜色titleColor="black",                  #设置标题颜色borderColor="grey",                  #设置地区边界颜色regionColor="SandyBrown")            #设置地区颜色)plot(map_out3)


但是个人习惯,还是比较喜欢先将主题定义好并命名,然后在运行图表代码的时候直接饮用,这样比较利于后期主题的微调:mytheme<-get_theme(theme="none",     #设置主题     lineColor="blue",                    #设置线条颜色backgroundColor="white",             #设置背景颜色titleColor="black",                  #设置标题颜色borderColor="grey",                  #设置地区边界颜色regionColor="Bisque") 
map_out4<-remap(mapdata=map_data,    title="我是标题",                   subtitle="我是副标题",             theme=get_theme(theme="none"))plot(map_out4)当然如果将数据框中的数据两列调换,那么地图就可以做成流入图。origin<- c("beijing","tianjin","shenyang","dalian","zhengzhou")    #终点destination<- rep("dalian",length(destination))        #起点
#合成数据框格式的起终点数据map_data<- data.frame(origin,destination) 
map_out5<-remap(mapdata=map_data,    title="我是标题",                   subtitle="我是副标题",             theme=get_theme(theme="Bright"))plot(map_out5)


如果想要存储该HTML对象,需要设定临时目录:setwd("D:/R/Rscript")      #保存图片的位置,不做修改默认为R的工作路径options(remap.js.web=T)    #动态网页图保存命令plot(map_out5)             #保存的同时自动调用浏览器窗口



其实以上所有图表都是带有动态交互效果的,这里我录制了一小段儿视频,大家可以看下:

往期精彩内容整理合集:2017年R语言发展报告(国内)R语言中文社区历史文章整理(作者篇)
R语言中文社区历史文章整理(类型篇)相关课程推荐
R语言可视化在商务场景中的应用:

☟☟☟ 戳阅读原文,即刻加入课程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: