R语言可视化——REmapB函数

时间:2022-05-08
本文章向大家介绍R语言可视化——REmapB函数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

今天跟大家介绍一个REmap包的新函数——REmapB。

它是REmap包中诸多组函数中的一位,功能上要强大于之前介绍的REmap函数,不仅可以完成REmap函数的所有图表效果,而且可以做出前者没有的地图效果。

以下是该函数的详细语法及参数:

?remapB
remapB(center = c(104.114129,37.550339),
       zoom = 5,
       color = "Bright",
       title = "",
       subtitle = "",
       markLineData = NA,
       markPointData = NA,
       markLineTheme = markLineControl(),
       markPointTheme = markPointControl(),
       geoData = NA)

参数说明:

参数一:center为地图中心,经纬度格式;

参数二:zoom为缩放设置,默认为5,代表全国地图,增大至10可放大至地市

参数三:color为地图颜色,可选有"Bright", "Blue", "light", "dark", "redalert", "googlelite", "grassgreen", "midnight", "pink", "darkgreen", "bluish", "grayscale", "hardedge"

参数四:title为地图主标题

参数五:subtitle为地图副标题

参数六:markLineData为绘制线条需要的数据,包括起点和终点两列

参数七:markPointDate为绘制点需要的数据,仅终点一列

参数八:markLineTheme为线条主题设置,通过markLineControl( )函数设置

参数九:markPointTheme为点主题设置,通过markPointControl( )函数设置

参数十:geoData为点、线绘制的地理位置数据存储,可以只是输入经纬度数据,也可通过get_geo_position(‘地点’)获取

其中以上参数中,markLineTheme和markLineTheme内含有诸多属性设置,类似REmap中的theme设置:

markLineTheme = markLineControl(symbol = NA,#控制线型
symbolSize = c(0,4),    #线条粗度变动范围
smooth = T,             #启用线条平滑度设置
smoothness =0.2,        #线条平滑度
effect = T,             #线条动效
lineWidth = 2,          #线宽
lineType = ‘dotted’,  #线条类别
color =‘Random’)      #线条颜色

参数说明:

参数一:symbol为标记样式,具体指线条两端的标记的形状,两个值分别为起点和终点,经过实际使用symbol参数不可修改

参数二:symbolSize为线条两端标记大小,对应symbol参数的两个值,实际上第一个值没用,因为开始标记为none

参数三:smooth为逻辑参数,设置线条是否平滑

参数四:smoothness为平滑度,smooth参数设置为T时有效,体现线条的弧度,减小到0时为直线

参数五:effect为逻辑参数,是否显示动态效果

参数六:lineWidth为线条粗细

参数七:lineType为线条类型,可选有solid(实线)、dotted(点线)、dashed(虚线)

参数八:color为线条颜色

根据以上参数名称,可以大致了解每一个参数的含义:

markPointTheme = markPointControl(symbol = "heart", #点形状

symbolSize = "Random", #点大小

effect = T, #动效启用

effectType = "scale", #动效类型

color = "Random") #颜色

参数说明:

参数一:symbol为点样式,可选项none、circle、rectangle、triangle、diamond、emptyCirle、emptyRectangle、emptyTriangle、emptyDiamond、heart、droplet、pin、arrow、star

参数二:symbolSize为点大小

参数三:effect为逻辑参数,是否显示动态效果

参数四:effectType为动态效果样式,可选scale(放大)和bounce(跳动)

参数五:color为点颜色

解读:effect参数在点太多时,动态效果会失效,这时建议设置为FALSE。在remapB( )函数中通过另外一个参数markPointData也可以设置点颜色,优先级高于color参数。

接下来我们可以根据以上参数说明制作一个一对多的流向图:

destination<- c("shanghai","guangzhou","济南","dalian","xian","chengdu","changchun","taiyuan","nanyang","zhengzhou")  #终点
origin<- rep("nanyang",length(destination))  #起点
map_data<- data.frame(origin,destination)  #合成数据框格式的作图数据
map_out<-remapB(zoom=5, #参数5绘制省级国家地图
                   color="dark",
                   title="我是主标题",
                   subtitle="我是副标题",
                   markLineData=map_data,
                   markPointData=destination,
                   markLineTheme=markLineControl(),
                   markPointTheme=markPointControl()
                   )
plot(map_out)

通过设置markLineTheme、markPointTheme两个主题内部的详细风格参数,你可以对线条以及数据点的气泡进行个性化设置。

map_out1<-remapB(zoom=5, 
                 color="dark",
                 title="我是主标题",
                 subtitle="我是副标题",
                 markLineData=map_data,
                 markPointData=destination,                
                 markLineTheme = markLineControl(
                 symbol = NA,            
                 symbolSize = c(0,4),   
                 smooth = T,             
                 smoothness =0.2,      
                 effect = T,            
                 lineWidth = 2,         
                 lineType ="dotted",  
                 color ="white"),
                 markPointTheme = markPointControl(
                 symbol = "heart", 
                 symbolSize = "Random",  
                 effect = T,              
                 effectType = "scale",   
                 color = "white") 
                 )
plot(map_out1)

如果只想要绘制流向线而不需要终点的点的话,直接给markPointData赋值为NA就可以了。

只要将我们的数据结构重新整理,就可以制作出路径地图:

newdata<- c("shanghai","guangzhou","chengdu","xian","taiyuan","济南","shanghai") 
origin<-c(newdata[-7])
destination<-c(newdata[-1])
map_data<- data.frame(origin,destination)
map_out2<-remapB(zoom=5, 
                 color="dark",
                 title="我是主标题",
                 subtitle="我是副标题",
                 markLineData=map_data,
                 markPointData=destination,                
                 markLineTheme = markLineControl(
                 symbol = NA,            
                 symbolSize = c(0,4),   
                 smooth = T,             
                 smoothness =0.2,      
                 effect = T,            
                 lineWidth = 2,         
                 lineType ="dotted",  
                 color ="white"),
                 markPointTheme = markPointControl(
                 symbol = "heart", 
                 symbolSize = "Random",  
                 effect = T,              
                 effectType = "scale",   
                 color = "white") 
                 )
plot(map_out2)

最后一个案例使用REmapB函数制作目标分布图:

首先搜索大连地区的大学:

加载百度地图包:

library("baidumap")
#查找大连的所有大学
dl_college <- getPlace("大学","大连")
Get 125 records, 7 page. 
    Getting  0 th page 
    Getting  1 th page 
    Getting  2 th page 
    Getting  3 th page 
    Getting  4 th page 
    Getting  5 th page 
    Getting  6 th page 
Done! 
head(dl_college)
                        name                                           address      lat      lon
1               大连工业大学                                         轻工苑1号 38.97890 121.5332
2               大连理工大学                     辽宁省大连市甘井子区凌工路2号 38.88868 121.5362
3               大连海事大学                             辽宁省大连市凌海路1号 38.87753 121.5387
4 大连交通大学(沙河口校区) 沙河口区黄河路794号交通大学小吃一条街内(近西南路) 38.91790 121.5770
5   大连外国语大学(旅顺校区)                   中国辽宁省大连市旅顺南路西段6号 38.81853 121.3154
6                   大连大学                                      学府大街10号 39.10660 121.8282
       telephone
1 (0411)86323693
2           <NA>
3           <NA>
4 (0411)84106313
5 (0411)86111157
6 (0411)87402114
str(dl_college)
'data.frame':	125 obs. of  5 variables:
 $ name     : chr  "大连工业大学" "大连理工大学" "大连海事大学" "大连交通大学(沙河口校区)" ...
 $ address  : chr  "轻工苑1号" "辽宁省大连市甘井子区凌工路2号" "辽宁省大连市凌海路1号" "沙河口区黄河路794号交通大学小吃一条街内(近西南路)" ...
 $ lat      : num  39 38.9 38.9 38.9 38.8 ...
 $ lon      : num  122 122 122 122 121 ...
 $ telephone: chr  "(0411)86323693" NA NA "(0411)84106313" ...

一共抓取了大连地区的125个带有大学的机构经纬度地址:

构造作图数据:

newdata1<-dl_college[,c(3,4,1)]
head(newdata1)
                        name      lat      lon
1               大连工业大学 38.97890 121.5332
2               大连理工大学 38.88868 121.5362
3               大连海事大学 38.87753 121.5387
4 大连交通大学(沙河口校区) 38.91790 121.5770
5   大连外国语大学(旅顺校区) 38.81853 121.3154
6                   大连大学 39.10660 121.8282
 newdata2<-newdata1[,c(2,1,3)]
map_out3 <- remapB(center = c(121.62139,38.91934),  
                zoom = 14,
                color = "Blue",
                title = "大连高校分布图",
                markPointData =newdata2[3],
                markPointTheme = markPointControl(
                symbol = "pin",
                symbolSize = 3,
                effect = T,
                color = "yellow"),
                geoData =newdata2 
               )
plot(map_out3) 

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

setwd("D:/R/Rscript")      #保存图片的位置,不做修改默认为R的工作路径
options(remap.js.web=T)    #动态网页图保存命令
plot(map_out3)             #保存的同时自动调用浏览器窗口