本篇內(nèi)容主要講解“ggplot2怎么通過顏色信號(hào)來對(duì)多邊形進(jìn)行填充”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“ggplot2怎么通過顏色信號(hào)來對(duì)多邊形進(jìn)行填充”吧!
成都創(chuàng)新互聯(lián)公司專注于鄂州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供鄂州營(yíng)銷型網(wǎng)站建設(shè),鄂州網(wǎng)站制作、鄂州網(wǎng)頁(yè)設(shè)計(jì)、鄂州網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造鄂州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供鄂州網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
ggplot2所有圖層對(duì)象中,geom_ploygon()幾何圖層對(duì)象最為復(fù)雜,也最為特殊:
復(fù)雜在哪兒呢?
這種幾何對(duì)象所定義的多邊形(特別是在地理信息數(shù)據(jù)里面),領(lǐng)土邊界是基于行政區(qū)劃、行政區(qū)劃再細(xì)分為單個(gè)多邊形(也就是group),單個(gè)多邊形又是一組經(jīng)緯度坐標(biāo)點(diǎn)構(gòu)成(按照order排序)。
所以說geom_ploygon()所要顯式聲明的參數(shù)至少需要四個(gè):
data(地理信息數(shù)據(jù)框)
long(經(jīng)度簡(jiǎn)寫)
lat(維度簡(jiǎn)寫)
group(多邊形分組變量)
即該圖層至少需要這四個(gè)參數(shù)才能保證可以輸出一張具有完成地理信息邊界的地圖出來。
注意了,我這里所說的完整的地理信息邊界,并不帶表行政邊界,地理信息邊界僅僅描述地球上實(shí)際存在的地理單位輪廓,所以這張圖僅僅是地理輪廓的描述,而無法看到國(guó)界線。
那么國(guó)界線是通過什么定義的呢?
國(guó)家線通常需要在group的基礎(chǔ)上,施加id(該id將同屬一個(gè)國(guó)家的不同group歸類為一個(gè)編號(hào)),當(dāng)然我們也可以將id匹配上國(guó)家(行政區(qū)劃)的實(shí)際名稱(通常獲取的數(shù)據(jù)地圖素材都會(huì)同時(shí)匹配上id和行政區(qū)劃名稱,甚至還有很多附加信息:ios編碼、簡(jiǎn)寫、拼音、英文名稱等等)。
那么問題來了,為啥之前所說的order沒有在geom_polygon()參數(shù)中進(jìn)行顯式聲明呢?
邊界點(diǎn)不聲明順序,軟件如何知道該按照什么樣的順序來進(jìn)行打印呢?
這個(gè)問題是個(gè)好問題,一語(yǔ)中的,確實(shí),order變量十分重要,但是通常獲取的地理信息文件中,order變量是已經(jīng)按照group分組變量排序過的,即通常所用到的地理信息數(shù)據(jù)框中,所有的邊界點(diǎn)經(jīng)緯度信息,是先按group分組,組內(nèi)按照order排序,這樣保證最后繪制出的地理信息邊界點(diǎn)不會(huì)出現(xiàn)錯(cuò)亂,不同多邊形有連接線等這種我們不想看到的情形。
當(dāng)這種group和order順序定義之后,軟件首先將所有的經(jīng)緯度坐標(biāo)點(diǎn)按照group順序打印,即先打印group順序排在第一的多邊形,group內(nèi)部按照order的順序,依次打印左邊點(diǎn),單個(gè)group但因完畢之后,這組點(diǎn)就被定義為一組,組標(biāo)識(shí)即為group的名稱(可以為數(shù)值、浮點(diǎn)或者文本,主要能夠區(qū)分開組別就可以)。
當(dāng)所有的組內(nèi)經(jīng)緯度點(diǎn)都按照此規(guī)則打印一遍之后,我們就可以看到整個(gè)地理信息邊界的輪廓。
此時(shí)地理信息輪廓定義完成,那么接下來需要進(jìn)行顏色映射,顏色映射規(guī)則很簡(jiǎn)單,不同的國(guó)家(或者行政區(qū)劃)對(duì)應(yīng)一個(gè)ID或者區(qū)劃名稱,每一個(gè)區(qū)劃名稱(或者國(guó)家,這里統(tǒng)稱為id)則對(duì)應(yīng)若干個(gè)group(之所有是若干個(gè),是因?yàn)檫@里的對(duì)應(yīng)關(guān)系可能是一一對(duì)應(yīng),也可能是一對(duì)多的關(guān)系,因?yàn)橹霸谥v述如何從json素材提取地理信息數(shù)據(jù)框已經(jīng)講述過原理,有些國(guó)家或者行政區(qū)僅有一個(gè)輪廓,而有些國(guó)家或者地區(qū)有多個(gè)地理上相互分離的領(lǐng)土,比如愛爾蘭、英國(guó)、中國(guó)的海南島、臺(tái)灣省、以及東南沿海諸多海島等)。
而每一個(gè)id(國(guó)家或者地區(qū))會(huì)對(duì)應(yīng)一個(gè)數(shù)值型(或者因子型變量),當(dāng)你在給ID賦值指標(biāo)變量的時(shí)候,就已經(jīng)完成了group到顏色之間的對(duì)應(yīng)映射關(guān)系。
我們只需要一個(gè)fill\colour美學(xué)映射屬性指定給一個(gè)指標(biāo)變量(數(shù)值型或者因子型),指定之后,軟件會(huì)在打印每一個(gè)地理多邊形同事,給這個(gè)多邊形指定填充色(或者輪廓色)。因?yàn)榭赡艽嬖谝粋€(gè)id對(duì)應(yīng)多個(gè)多邊形(group)的情況,所以這些同屬一個(gè)id的多邊形都會(huì)被填充(或者輪廓色)同一個(gè)數(shù)量級(jí)的填充色(或者輪廓色)。
所以到這里,我們?cè)倩仡^看以上內(nèi)容:
一副完整的,帶有行政區(qū)劃與指標(biāo)變量映射關(guān)系的geom_polygon()的圖層完整的語(yǔ)法需要指定以下一個(gè)參數(shù):
gggplot(data=mydata)+
geom_polygon(aes(x=long,y=lat,group=group,fill/colour=zhibiao))
以上是最為典型的數(shù)據(jù)地圖做法,fill/colour的顏色映射結(jié)果會(huì)根據(jù)zhibiao變量的性質(zhì)進(jìn)行映射形式調(diào)整,即如果zhibiao是連續(xù)型變量,那么最終就會(huì)按照連續(xù)漸變色進(jìn)行填充,圖例也是練習(xí)漸變的圖例,指標(biāo)是分類或者因子型,則會(huì)按照離散漸變進(jìn)行填充。(至于這兩種顏色映射方法的具體規(guī)則和原理,以后會(huì)講到)。
沒有考慮order并不代表,order不重要,事實(shí)上,order是非常重要的一個(gè)變量,只是它已經(jīng)被提前考慮過了(因?yàn)樘匾耍晕覀冃枰倏紤]它,但是倘若數(shù)據(jù)順序因?yàn)槟撤N原因而被打亂了,那么我們需要自己重新排序。
通常只需追加一句代碼:
dplyr::arrange(mymapdata,group,order)
即先按照group分組,組內(nèi)按照order排序,這樣既可保證最終的數(shù)據(jù)是符合幾何圖層映射規(guī)則,能被正確映射出來的。
接下來我用幾個(gè)圖形來展示以上所說的所有的原理:
library(maps)
library("ggplot2")
library("ggthemes")
library("ggthemes")
library("RColorBrewer")
world_map<-map_data("world")
head(world_map)
ggplot(world_map)+
geom_polygon(aes(x=long,y=lat))
以上我未指定分組變量,所以自然映射結(jié)果出現(xiàn)這種情況,即軟件將所有點(diǎn)全部連在一起。
ggplot(data=world_map)+
geom_polygon(aes(x=long,y=lat,group=group),colour="white")
指定分組之后,勾勒出了地理信息輪廓,事實(shí)上此時(shí)你并不知道國(guó)家的分界線(你只是基于常識(shí),記得那個(gè)國(guó)家在那個(gè)位置,但是精確的領(lǐng)土分界是無法得知的,相信我~)
world_map[world_map$region=="Taiwan",]$region<-"China"
ggplot(data=world_map)+
geom_polygon(aes(x=long,y=lat,group=group,fill=region),color="grey95")+
theme_map() %+replace% theme(legend.position ="none")
此時(shí)通過region映射之后的地圖,呈現(xiàn)的才是相對(duì)精確的行政區(qū)劃邊界信息。
(這里說明以下,所用地圖僅用于案例演示使用,限于經(jīng)濟(jì)能力,無法獲得高精度地圖,如果出現(xiàn)邊界線糾紛問題,不代表官方觀點(diǎn))。
當(dāng)然,你可以將顏色映射在行政區(qū)劃的輪廓線上。(但是只這樣往往是不可取的,因?yàn)檩喞€顏色色彩占比太少,不利于肉眼識(shí)別,區(qū)分度不高)
ggplot(data=world_map)+
geom_polygon(aes(x=long,y=lat,group=group,color=region),fill="grey95")+
theme_map() %+replace% theme(legend.position ="none")
以上使用的region(即地區(qū)ID)映射,因?yàn)榇朔莸貓D有將近200+個(gè)國(guó)家行政區(qū),免不了顏色重復(fù),而且通常我們并不必要將每一個(gè)國(guó)家和地區(qū)都指定一個(gè)單獨(dú)的顏色。
更有意義的做法是,根據(jù)不同國(guó)家或者地區(qū)的某個(gè)指標(biāo)進(jìn)行連續(xù)漸變填充或者離散顏色填充。
region<-unique(world_map$region)
zhibiao<-runif(251,0,500)
mydata<-data.frame(region,zhibiao)
mydata$factor<-cut(mydata$zhibiao,breaks=c(0,100,200,300,400,500),labels=c("0~100","100~200","200~300","300~400","400~500"),order=TRUE,include.lowest = FALSE)
mynewmapdata<-merge(world_map,mydata)%>%dplyr::arrange(group,order)
連續(xù)漸變:
ggplot(data=mynewmapdata)+
geom_polygon(aes(x=long,y=lat,group=group,fill=zhibiao),colour="grey95")+
scale_fill_gradient(low="white",high="steelblue") +
theme_map() %+replace% theme(legend.position ="none")
離散填充:
ggplot(data=mynewmapdata)+
geom_polygon(aes(x=long,y=lat,group=group,fill=factor),colour="grey95")+
scale_fill_brewer(palette="Greens",guide=FALSE)+
theme_map() %+replace% theme(legend.position ="none")
到此,相信大家對(duì)“ggplot2怎么通過顏色信號(hào)來對(duì)多邊形進(jìn)行填充”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
文章名稱:ggplot2怎么通過顏色信號(hào)來對(duì)多邊形進(jìn)行填充
標(biāo)題網(wǎng)址:http://aaarwkj.com/article2/pegcic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、定制開發(fā)、網(wǎng)站維護(hù)、動(dòng)態(tài)網(wǎng)站、虛擬主機(jī)、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)