您好,登錄后才能下訂單哦!
今天給大家介紹一下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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。