今天给大家介绍一下ggplot2多维分面多图层对应规则是什么。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。
今天只给大家讲一个知识点,是属于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多维分面多图层对应规则是什么的全部内容了,更多与ggplot2多维分面多图层对应规则是什么相关的内容可以搜索亿速云之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下亿速云!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。