[周R] REmap:可视化地图

REmap包归功于百度的可视化开源项目——echarts,它是国内为数不多的高水平开源可视化js库,在业界地位首屈一指。

经过大神的努力,我们可以在R语言中以简洁的REmap函数形式,来调用Echarts核心功能,而不用亲自去学js代码,就可以创建动态地图可视化作品

R version 3.4.1 (2017-06-30) -- "Single Candle"
Copyright (C) 2017 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 (64-bit)

安装
install.packages("devtools")
devtools::install_github("lchiffon/REmap") 
library(REmap)

REmap函数的作图理念与ggplot其实还是有雷同的,它也是将数据信息美学信息分开表达,数据信息包含在数据表中,而美化修饰参数都包含在theme内。

remap(mapdata, title = " ", 
     subtitle = "", 
     theme = get_theme("Dark"))
  • mapdata是我们所要展示的数据框格式数据集,里面包含了两列数据:起点位置、终点信息。
  • title用于设置主标题
  • subtitle用于设置副标题
  • theme用于设定整个图形的主题风格,该主题是一个封装的函数变量,里面包含诸多参数信息(各种点线面的颜色、度量等信息)。
    get_theme(theme = "Dark",
                      lineColor = "Random",
                      backgroundColor = "#1b1b1b",
                      titleColor = "fff",
                      borderColor = "rgba(100,149,237,1)",
                      regionColor = "#1b1b1b",
                      labelShow = T,
                      pointShow = F,
                      pointColor = "gold")
output
参数说明:
参数一:theme为总体配色,默认选项有“Dark”、“Bright”、“Sky”、“none”
参数二:lineColor为线条颜色,默认是随机, 也可自行设置,如’red’
参数三:backgroundColor为地图外背景颜色
参数四:titleColor为标题颜色
参数五:borderColor为地图中地域边缘颜色,不同省份、城市的边缘
参数六:regionColor为地域颜色,即地图显示的颜色
参数七:labelShow为逻辑参数,是否显示地域名称,默认为T,即显示,只用于remapC函数
参数八:pointShow为逻辑参数,是否显示地域所在点,默认为F,不显示,只用于remapC函数
参数九:pointColor为pointShow中点的颜色,只用于remapC函数
get_city_coord("天津")
117.20952  39.09367
Warning message:
In get_city_coord("天津") : Please use your own baidu API!
Set it using: options(remap.ak = "XXXXX")
http://lbsyun.baidu.com
> city_list <- c("beijing","tianjin","hefei","suzhou","chongqing")
> 
> get_geo_position(city_list)
       lon      lat      city
1 116.5007 39.92066   beijing
2 117.7364 39.08707   tianjin
3 117.2334 31.82658     hefei
5 106.5584 29.56900 chongqing

而且据说这两个函数大部分时候对拼音与汉字,甚至拼音的大小写都不敏感,所以避免了很多麻烦。

一个例子
  • 创建起始点:
  destination<- c("beijing","tianjin","nanjing","hefei","chengdu")    #终点
 origin<- rep("tianjing",length(destination))        #起点
  • 合成数据框格式的起终点数据
    map_data<- data.frame(origin,destination)     
  • 数据预览:
head(map_data)
 head(map_data)
    origin destination
1 tianjing     beijing
2 tianjing     tianjin
3 tianjing     nanjing
4 tianjing       hefei
5 tianjing     chengdu

作图函数:

    map_out<-remap(mapdata=map_data,   #流向地图的数据源(依次为起点、重点两列)
                    title="我是标题",         #设置主标题
                    subtitle="我是副标题",    #设置副标题
                    theme =get_theme(theme="Sky")) #设置主题(默认主题一共有三套:“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\Rtmp6Rhp9p/ID_20180211193926_934658.html

运行完成之后,浏览器窗口会自动呈现动态图表效果:
鼠标放在新疆如下:

图片.png

当然如果你要想自定义主题的话,也是可以的,但是需要将theme="Sky"设置为none,否则系统主题会覆盖掉你自定义的主题。

    map_out2<-remap(mapdata=map_data,     #设计流向地图

    title="我是标题",                    #设置标题
    subtitle="我是副标题",               #设置副标题
    theme=get_theme(theme="none",        #设置主题     
    lineColor="blue",                    #设置线条颜色
    backgroundColor="white",             #设置背景颜色
    titleColor="red",                 #设置标题颜色
    borderColor="red",                  #设置地区边界颜色
    regionColor="SandyBrown")            #设置地区颜色
    )
    plot(map_out2)
图片.png

也可以自己设置好主题,然后在运行图表代码的时候直接应用,这样比较利于后期主题的微调:

    mytheme<-get_theme(theme="none",     #设置主题     
    lineColor="blue",                    #设置线条颜色
    backgroundColor="white",             #设置背景颜色
    titleColor="black",                  #设置标题颜色
    borderColor="grey",                  #设置地区边界颜色
    regionColor="Bisque") 
    map_out3<-remap(mapdata=map_data,    
   title="我是标题",                   
    subtitle="我是副标题",             
    theme=get_theme(theme="none"))
    plot(map_out3)

当然如果将数据框中的数据两列调换,那么地图就可以做成流入图。

 origin<- c("beijing","tianjin","nanjing","hefei","chengdu")    #终点
 destination<- rep("tianjing",length(destination))        #起点
 map_out<-remap(mapdata=map_data,   #流向地图的数据源(依次为起点、重点两列)
                    title="我是标题",     
                    subtitle="我是副标题",   
                    theme =get_theme(theme="Sky")) 
plot(map_out)
流入图

如果想要存储该HTML对象,需要设定临时目录:

    setwd("C:\Users\Administrator\Documents")      #保存图片的位置,不做修改默认为R的工作路径
    options(remap.js.web=T)    #动态网页图保存命令
    plot(map_out5)             #保存的同时自动调用浏览器窗口
运来行程

其实以上所有图表都是带有动态效果的,我放了两个在网上,一个流入一个流出:

ex1
ex2

行程图
origin<- c("tianjing","nanjing","hefei","bozhou")     #起点
destination<- c(origin[-1],origin[1])     #终点
map_data4<- data.frame(origin,destination)       #合成数据框格式的起终点数据

map_out4<- remap(mapdata = map_data4,        #详细设计行程地图            
                 title = "周运来春节行程地图",
                 subtitle = "三个家",  
                 theme = get_theme(theme = "Sky")    
)
plot(map_out4)      #在web上展示图形
图片.png
geo_data <- get_geo_position(unique(union(destination,origin)))  
map_out5 <- remapB(zoom=5,                
                   color = "Blue",           
                   title = "心型行程图",        
                   subtitle = "爱心哦",  
                   markLineData = map_data4,
                   markPointData = map_data4[,2],
                   markLineTheme = markLineControl(symbol = NA,                                
                               symbolSize = c(0,4),                     
                               smooth = T ,    
                               smoothness = 0.2,                                      
                               effect = T,
                               lineWidth = 2,
                               lineType = "dotted",
                               color = "Random"),
                   markPointTheme = markPointControl(symbol = "heart"
                               symbolSize = "Random",
                               effect = T,
                               effectType = "scale",
                               color = "Random"),
                               geoData = geo_data)
plot(map_out5)

REmap 还可以绘制地图热图,就是省份数值高低反映在颜色上,这一点还没有研究。本周就先这样,有时间我再补上。

学习资料:
R语言可视化——REmap动态地图
[R包]REmap
数据挖掘:R语言01 地图可视化REmap包

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容