您好,登錄后才能下訂單哦!
今天給大家介紹一下ggplot2多維分面多圖層對應(yīng)規(guī)則是什么。文章的內(nèi)容小編覺得不錯,現(xiàn)在給大家分享一下,覺得有需要的朋友可以了解一下,希望對大家有所幫助,下面跟著小編的思路一起來閱讀吧。
今天只給大家講一個知識點,是屬于ggplot2高階用法中的分面與多圖層關(guān)系如何對應(yīng),這個用法之前困擾我很久,也是最近幫朋友做東西才發(fā)現(xiàn)這個漏洞,于是感覺分享給大家。
ggplot2的多維分面系統(tǒng)非常完美,可以讓我們非常方便的將一個多維度的復(fù)雜圖形按照某個維度的類別進行矩陣化,使得單個類別的信息更加清晰明了,數(shù)據(jù)呈現(xiàn)直觀易懂。
通常我們可以通過如下步驟做出一個基于地理位置的分面圖來。
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)
然而問題來了,以上圖形僅僅基于同一個圖層進行維度分面,倘若我有如下需求,不僅要對地圖進行分面,而且要在單個區(qū)域地圖上呈現(xiàn)一些點信息、線條的信息,這就意味著我們需要在保持分面的基礎(chǔ)上,疊加圖層,那么我們給分面函數(shù)指定的分面規(guī)則是否能夠作用于第二個圖層呢,或者說想要讓分面函數(shù)同事控制所有圖層應(yīng)該 如何進行參數(shù)設(shè)定呢,分面參數(shù)的控制權(quán)限到底有多高呢?
帶著以下疑問,我們先嘗試著在原始分面圖層的基礎(chǔ)上疊加一個散點圖層。
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)
然而遺憾的是,我們得到的結(jié)果是這樣的,分面函數(shù)僅僅控制了第一個圖層(也就是地圖的圖層),卻對第二個圖層(散點圖層沒有任何影響),這不是我們想要的結(jié)果,我們想要的是這個分面參數(shù)同事完成地圖和散點圖的對應(yīng)區(qū)域分割、匹配。
實際上以上結(jié)果并不難解釋,因為我們在分面參數(shù)設(shè)定是,參數(shù)設(shè)置的依據(jù)是第一個圖層的數(shù)據(jù)源中的NAME_1字段,但是我們并沒有保證第二個圖層中有這個同屬性,同名稱的字段。
事實上為了進行接下來的案例講解,我確實在散點圖的數(shù)據(jù)源中設(shè)定了一個跟多邊形(也就是第一個圖層)數(shù)據(jù)源的NAME_1同屬性的字段(里面記錄的都是類別相同的省份名稱),為了對比效果暫時命名為Province。但是分面函數(shù)只能在以上兩個數(shù)據(jù)框中找到第一個圖層數(shù)據(jù)源中含有NAME_1變量,而第二個圖層的數(shù)據(jù)源中盡管有同性質(zhì)的變量,但是名稱不同,分面函數(shù)是無法識別的,因為忽略了對圖層二的分面操作。
接下來我將圖層二中的省份名稱變量更改為更圖層一中名稱相同,再看下結(jié)果:
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)
這下效果一目了然,分面函數(shù)很順利的識別了通過設(shè)定的分面依據(jù)字段NAME_1,在圖層一、圖層二中均探測到了同名字段,而且字段結(jié)構(gòu)類別均一致,分面操作成功。
以上就是ggplot2多維分面多圖層對應(yīng)規(guī)則是什么的全部內(nèi)容了,更多與ggplot2多維分面多圖層對應(yīng)規(guī)則是什么相關(guān)的內(nèi)容可以搜索億速云之前的文章或者瀏覽下面的文章進行學(xué)習(xí)哈!相信小編會給大家增添更多知識,希望大家能夠支持一下億速云!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。