查看原文
其他

R语言可视化——多边形与数据地图填充

2016-09-29 小魔方 数据小魔方

ggplot函数中有一类特殊的图表类型叫做多边形,很难用传统的视角来定义它属于哪一类图表,因为它能够呈现信息多种多样。


特别是在做某些比较高阶的图表——地图时,这种多边形函数便能够大显神通。


之前本公众号所推送的所有涉及地图图表绘制所使用的技巧,几乎全部都依赖多边形函数的支持。


library(ggplot2)

library(plyr)

library("maptools")


这里以之前推送过的全球地图为例:


导入地图地理信息数据:


world_map <-readShapePoly("c:/rstudy/wold_map/World_region.shp")


使用路径图进行区域轮廓描边:


ggplot(world_map,aes(x=long,y=lat,group=group)) +

geom_path()




更改路径线为白色,清除掉背景和网格线以及坐标轴:


ggplot(world_map,aes(x=long,y=lat,group=group)) +

geom_path(colour="steelblue")+ theme(               

          panel.grid = element_blank(),

          panel.background = element_blank(),

          axis.text = element_blank(),

          axis.ticks = element_blank(),

          axis.title = element_blank())




使用多边形进行描边并填充:(在多边形中是可以进行线条与形状分别填色的)


ggplot(world_map,aes(x=long,y=lat,group=group)) +geom_polygon(fill="white",colour="grey") + theme( panel.grid = element_blank(),

          panel.background = element_blank(),

          axis.text = element_blank(),

          axis.ticks = element_blank(),

          axis.title = element_blank())




这就是我们之前所制作的填色地图的主体代码语句,数据集是从shp文件导入,可以看出,其实只需要三列字段信息,就可以画出一幅地图来:经纬度(二维坐标信息,也可以看作是一组代表X、Y轴的散点),另外的一列变量group其实是一个分类变量,将同一个单位区域轮廓(一个国家或者地区、岛屿等)用一组相同的编号表示。


如果再加上一列连续数值变量,可以将其指定为fill渐变填充的参考指标,那么最终完成的图表就是一幅按照不同地区指标大小对应渐变填色地图。


其实这种不带任何实质数据信息的地图,很多R包中都有提供:(这里以maps包为例)


library(maps)


states<-map_data("state")


ggplot(states,aes(long,lat,group=group))+geom_polygon(fill="white",colour="steelblue")+ theme(panel.grid = element_blank(),

          panel.background = element_blank(),

          axis.text = element_blank(),

          axis.ticks = element_blank(),

          axis.title = element_blank())




map包是一个专门用来做地图的加载包,里面存有几个可以用的地图数据包:


states<-map_data("world") #全球地图


ggplot(world,aes(long,lat,group=group))+geom_polygon(fill="white",colour="steelblue")+ theme(panel.grid = element_blank(),

          panel.background = element_blank(),

          axis.text = element_blank(),

          axis.ticks = element_blank(),

          axis.title = element_blank())




france<-map_data("france") #法国地图


ggplot(france,aes(long,lat,group=group))+geom_polygon(fill="white",colour="steelblue")+ theme(panel.grid = element_blank(),

          panel.background = element_blank(),

          axis.text = element_blank(),

          axis.ticks = element_blank(),

          axis.title = element_blank())





county<-map_data("county") #美国郡级


ggplot(county,aes(long,lat,group=group))+geom_polygon(fill="white",colour="steelblue")+ theme(panel.grid = element_blank(),

          panel.background = element_blank(),

          axis.text = element_blank(),

          axis.ticks = element_blank(),

          axis.title = element_blank())




地图投影方式:


france<-map_data("france") #法国地图


ggplot(france,aes(long,lat,group=group))+geom_polygon(fill="white",colour="steelblue")+coord_map("polyconic")+theme(

          axis.text = element_blank(),

          axis.ticks = element_blank(),

          axis.title = element_blank())




county<-map_data("county") #美国郡级


ggplot(county,aes(long,lat,group=group))+geom_polygon(fill="white",colour="steelblue")+coord_map("polyconic")+theme(

          axis.text = element_blank(),

          axis.ticks = element_blank(),

          axis.title = element_blank())




地图图表作为ggplot函数中一大类比较高阶的图表,可以做出很多让人眼花缭乱、令人尖叫的作品来,感兴趣的小伙伴儿赶快学起来。


魔方学院QQ群:


QQ群:

微信群:



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

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