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

今天开始,要跟着大家学习一个新的可视化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",

borderColor = "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 city

1 116.4136 39.91101 beijing

2 117.2059 39.09091 tianjin

3 123.4390 41.81134 shenyang

4 121.6214 38.91934 dalian

5 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 destination

1 dalian beijing

2 dalian tianjin

3 dalian shenyang

4 dalian dalian

5 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) #保存的同时自动调用浏览器窗口

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

视频内容

原文发布于微信公众号 - 数据小魔方(datamofang)

原文发表时间:2016-10-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据小魔方

不等款柱形图(时间刻度实现)

今天要分享的图表仍然是昨天的不等款柱形图! ▽▼▽ 虽然最终制作出来的最终图表效果是相同的,但是制作理念和数据组织方式却截然不同,非常值得尝试! ●●●●● 数...

37460
来自专栏极客猴

使用 Python 生成二维码

新时代,人们有人信新的追求,自然而然会有新发明的诞生。去年,在“一带一路”国际合作高峰论坛举行期间, 20 国青年投票选出中国的“新四大发明”:高铁、扫码支付、...

36200
来自专栏QQ音乐技术团队的专栏

动态图片技术 : 历史、格式与性能

本文主要内容为动态图片的定义、发展历史与现状,动态图片相关的术语和概念,动态图片各主要格式,及简要对比,在 Android 平台对比 GIF 与 WebP 格式...

45700
来自专栏数据小魔方

仪表盘图表

很抱歉最近几天骨折忙考试,连着四天都没有自己写教程了,不过为了不辜负大家对小魔方的期待,我也是精挑细选从哪些活跃的PPT达人那里转载了几篇关于PPT图文排版的帖...

49150
来自专栏腾讯NEXT学位

简单三步做出微信h5表情包

27540
来自专栏IMWeb前端团队

LaTex数理化公式展示方案简介

本文作者:IMWeb jerytang 原文出处:IMWeb社区 未经同意,禁止转载 LaTex 是什么 LaTex 是基于 Tex 的排版系统,常用...

95560
来自专栏菩提树下的杨过

silverlight3中的"伪"3D

silverlight3中的3d效果,实际上是通过2d+算法模拟出来的"伪3D"(个人估计可能是考虑跨平台和显卡硬件支持通用性所以最终采用了这种设计) ? 上面...

21180
来自专栏学习圈

移动端通用优化方案

手机屏幕帧率一般为60 FPS,也就是说一帧的渲染时间为16.7ms,所以如果页面渲染时间超过16.7ms 容易出现卡顿现象。提高页面渲染效率可以考虑如下方法:

260110
来自专栏理论坞

【教程】C4D制作Lowpoly风格

按键盘m键,再按c键,调出笔刷工具,将衰减值改成50%,模式改成表面,笔刷强度50%,半径60cm。然后开始在平面上绘制地形。

13420
来自专栏人工智能头条

一边吃瓜看球,一边完成AI应用实践——手写体识别入门

23420

扫码关注云+社区

领取腾讯云代金券