美文网首页编程学习R语言
[周R] REmap:可视化地图

[周R] REmap:可视化地图

作者: 周运来就是我 | 来源:发表于2018-03-03 21:05 被阅读459次

    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包

    相关文章

      网友评论

        本文标题:[周R] REmap:可视化地图

        本文链接:https://www.haomeiwen.com/subject/dgfltftx.html