查看原文
其他

R语言可视化——REmapB函数

2016-10-17 小魔方 数据小魔方

今天跟大家介绍一个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)             #保存的同时自动调用浏览器窗口


魔方学院QQ群:


QQ群:

微信群:


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存