本日只给各人讲一个常识点,是属于ggplot2高阶用法中的分面与多图层干系如何对应,这个用法之前困扰我好久,也是最近帮伴侣做对象才发明这个裂痕,于是感受分享给各人。
ggplot2的多维分面系统很是完美,可以让我们很是利便的将一个多维度的巨大图形凭据某个维度的种别举办矩阵化,使得单个类此外信息越发清晰明白,数据泛起直观易懂。
凡是我们可以通过如下步调做出一个基于地理位置的分面图来。
library(ggplot2) library(plyr) library(maptools) library(Cairo) library(RColorBrewer) library(dplyr)
CHN_adm2 <- readShapePoly(“D:/R/rstudy/CHN_adm/CHN_adm2.shp”) CHN_adm2_1 <- fortify(CHN_adm2) data1 <- CHN_adm2@data data2 <- data.frame(id=row.names(data1),data1) china_map_data <- join(CHN_adm2_1,data2, type = “full”) dongsansheng <-subset(china_map_data,NAME_1==c(“Heilongjiang”,”Jilin”,”Liaoning”)) dongsansheng$NAME_1<-as.character(dongsansheng$NAME_1)
mydata<-read.csv(“D:/R/rstudy/State/dongsansheng.csv”,header=T)dongsansheng<-within(dongsansheng,{NAME_1[NAME_1==”Heilongjiang”]=”黑龙江”NAME_1[NAME_1==”Jilin”]=”吉林”NAME_1[NAME_1==”Liaoning”]=”辽宁”})
ggplot()+ geom_polygon(data=dongsansheng,aes(x=long,y=lat,group=group),colour=”grey40″,fill=”white”) + facet_grid(.~NAME_1,scales = “free”)+ coord_map(“polyconic”)+ theme_void(base_size=18)
然而问题来了,以上图形仅仅基于同一个图层举办维度分面,倘若我有如下需求,不只要对舆图举办分面,并且要在单个区域舆图上泛起一些点信息、线条的信息,这就意味着我们需要在保持分面的基本上,叠加图层,那么我们给分面函数指定的分面法则是否可以或许浸染于第二个图层呢,可能说想要让分面函数同事节制所有图层应该 如何举办参数设定呢,分面参数的节制权限到底有多高呢?
带着以下疑问,我们先实验着在原始分面图层的基本上叠加一个散点图层。
midpos <- function(x) mean(range(x,na.rm=TRUE))centres <- ddply(dongsansheng,.(NAME_2),colwise(midpos,.(long,lat)))mydata<-mydata%>%merge(centres)ggplot() + geom_polygon(data=dongsansheng,aes(x=long,y=lat,group=group),colour=”grey40″,fill=”white”) + geom_point(data=mydata,aes(x=long,y=lat,size=zhibiao),colour=”red”,alpha=.5)+ facet_grid(.~NAME_1,scales = “free”)+ coord_map(“polyconic”)+ scale_size_area(max_size=8)+ theme_void(base_size=18)
然而遗憾的是,我们获得的功效是这样的,分面函数仅仅节制了第一个图层(也就是舆图的图层),却对第二个图层(散点图层没有任何影响),这不是我们想要的功效,我们想要的是这个分面参数同事完成舆图和散点图的对应区域支解、匹配。
实际上以上功效并不难表明,因为我们在分面参数设定是,参数配置的依据是第一个图层的数据源中的NAME_1字段,可是我们并没有担保第二个图层中有这个同属性,同名称的字段。
事实上为了举办接下来的案例讲授,我确实在散点图的数据源中设定了一个跟多边形(也就是第一个图层)数据源的NAME_1同属性的字段(内里记录的都是种别沟通的省份名称),为了比拟结果临时定名为Province。可是分面函数只能在以上两个数据框中找到第一个图层数据源中含有NAME_1变量,而第二个图层的数据源中尽量有同性质的变量,可是名称差异,分面函数是无法识此外,因为忽略了对图层二的分面操纵。
接下来我将图层二中的省份名称变量变动为更图层一中名称沟通,再看下功效:
mydata<-mydata%>%rename(NAME_1=Province)ggplot() +geom_polygon(data=dongsansheng,aes(x=long,y=lat,group=group),colour=”grey40″,fill=”white”) + geom_point(data=mydata,aes(x=long,y=lat,size=zhibiao),colour=”red”,alpha=.5)+ facet_grid(.~NAME_1,scales = “free”)+ coord_map(“polyconic”)+ scale_size_area(max_size=8)+ theme_void(base_size=18)
这下结果一目了然,分面函数很顺利的识别了通过设定的分面依据字段NAME_1,在图层一、图层二中均探测到了同名字段,并且字段布局种别均一致,分面操纵乐成。
这个常识点相对难领略,属于ggplot2高阶用法中较量深奥的部门,与此沟通的尚有分面参数的节制权限范畴问题,即分面参数的节制权限范畴到底有多高,是否可以节制ggplot父函数内设定的同名参数,关于这一点儿,我先挖个坑,今后有时间再填,假如你感乐趣,可以本身通过以上提示,利用本日的案例数据修改参数,本身摸索,相信在实践中晋升技术,你学到的才是硬实力。
接待插手本站果真乐趣群贸易智能与数据阐明群乐趣范畴包罗各类让数据发生代价的步伐,实际应用案例分享与接头,阐明东西,ETL东西,数据客栈,数据挖掘东西,报表系统等全方位常识QQ群:81035754
ggplot2多维分面多图层对应法则
最后更新 2017-12-03 08:00 星期日 所属:
其他教程 浏览:541