您好,登錄后才能下訂單哦!
這篇文章主要介紹了ggplot2中怎么自定義數(shù)據(jù)地圖版面范圍,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
之前聯(lián)系過(guò)程中遇到的一個(gè)小技術(shù)問(wèn)題,就是在ggplot2制作數(shù)據(jù)地圖時(shí),使用標(biāo)度調(diào)整參數(shù)進(jìn)行范圍限定時(shí),總是出現(xiàn)錯(cuò)誤,版面上出現(xiàn)交錯(cuò)的線條和條帶。
應(yīng)該是自己添加的標(biāo)度限定參數(shù)與ggplot2映射規(guī)則出現(xiàn)了沖突,特別再加上空間投影參數(shù),這種沖突和錯(cuò)亂就顯得更加明顯。
其實(shí)我就是想要獲取這樣一幅數(shù)據(jù)地圖,而不是做完整個(gè)世界地圖之后再去裁剪導(dǎo)出的圖片。(那樣會(huì)顯得很不fashion)。
library("ggplot2")
library("plyr")
library("maptools")
library("ggthemes")
options(stringsAsFactors=FALSE,warn=FALSE)
world_map <-readShapePoly("D:/R/rstudy/wold_map/World_region.shp")
x <- world_map@data
xs <- data.frame(x,id=seq(0:250)-1)
world_map1 <- fortify(world_map)
world_map_data <- join(world_map1, xs, type = "full")
mydata <- read.csv("D:/R/rstudy/wold_map/Region_map.csv")
mydata$fam<-cut(mydata$zhibiao1,breaks=c(0,100,200,300,400,500),labels=c('0~100','100~200','200~300','300~400','400~500'),order=TRUE,include.lowest=TRUE)
world_data <- join(world_map_data, mydata, type="full")
這是完整的世界地圖:
windowsFonts(myfont=windowsFont("微軟雅黑 Light"))
ggplot(world_data, aes(x = long, y = lat, group = group,fill =fam)) +
geom_polygon(colour="white")+
scale_fill_brewer(palette="Blues") + ###Blues&Greens
ggtitle("某公司2015~2016年度營(yíng)業(yè)狀況分布圖")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace%
theme(title=element_text(family="myfont"),legend.position=c(0.08,0.4),legend.text.align=1)
倘若我想將該地圖版面聚焦到中國(guó)的領(lǐng)土范圍內(nèi),但是呢,又不想單獨(dú)呈現(xiàn)孤零零的中國(guó)地圖,我需要中國(guó)周邊的這些鄰國(guó)邊界,來(lái)鎖定中國(guó)在亞洲地區(qū)的大致位置,這些周邊領(lǐng)國(guó)邊界不要求都擁完整的行政區(qū)劃,可以根據(jù)版面的需要,進(jìn)行矩形切割就行。
這樣看起來(lái)必須對(duì)世界地圖進(jìn)行切割,而且需要切割的是美學(xué)映射參數(shù)x,y的范圍(也就是坐標(biāo)系統(tǒng)的范圍)。
我們都知道在ggplot2系統(tǒng)中,調(diào)整X,Y的標(biāo)度范圍擁有布置一個(gè)的可選參數(shù):
xlim/ylim
expand_limits()
scale_x/y_continuous()
其實(shí)坐標(biāo)軸系統(tǒng)中也可以嵌入標(biāo)度調(diào)整參數(shù):
coord_map()
那么應(yīng)該使用哪個(gè)方法進(jìn)行調(diào)整呢,這里就賣(mài)個(gè)關(guān)子,我們一個(gè)一個(gè)來(lái)嘗試:
切割的范圍為:
經(jīng)度:60~155
維度:0~65
這個(gè)范圍剛好可以涵蓋我國(guó)領(lǐng)土的完整范圍:
方案一:xlim/ylim
ggplot(world_data, aes(x = long, y = lat, group = group,fill =fam)) +
geom_polygon(colour="white")+
xlim(60,155)+ylim(0,65)+
scale_fill_brewer(palette="Blues") +
coord_map("polyconic") +
ggtitle("某公司2015~2016年度營(yíng)業(yè)狀況分布圖")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace%
theme(title=element_text(family="myfont"),legend.position=c(0.08,0.4),legend.text.align=1)
切割效果如下,有反饋但是效果不佳,未達(dá)到目的,第一種方案宣告失敗。
方案二:expand_limits()
ggplot(world_data, aes(x = long,y=lat,group=group)) +
geom_polygon(aes(fill =fam),colour="white")+
expand_limits(x=c(60,155),y=c(0,65))+
scale_fill_brewer(palette="Blues") +
coord_map("polyconic") +
ggtitle("某公司2015~2016年度營(yíng)業(yè)狀況分布圖")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace%
theme(title=element_text(family="myfont"),legend.position=c(0.08,0.4),legend.text.align=1)
這次結(jié)果又失敗了,不僅沒(méi)有完成目標(biāo),底部還出現(xiàn)了一條莫名其妙的線條。
方案三:scale_x/y_continuous()
ggplot(world_data, aes(x = long, y = lat, group = group,fill =fam)) +
geom_polygon(colour="white")+
scale_x_continuous(limits=c(60,155))+
scale_y_continuous(limits=c(0,65))+
scale_fill_brewer(palette="Blues") +
coord_map("polyconic") +
ggtitle("某公司2015~2016年度營(yíng)業(yè)狀況分布圖")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace%
theme(title=element_text(family="myfont"),legend.position=c(0.08,0.4),legend.text.align=1)
第三種方案又以失敗告終,結(jié)果跟第一種的問(wèn)題一模一樣。
那么現(xiàn)在就剩最后一一種方案啦,希望這次能成功。
方案四:coord_map()
ggplot(world_data,aes(x =long,y=lat,group=group,fill=fam))+
geom_polygon(colour="white")+
scale_fill_brewer(palette="Blues") +
coord_cartesian(xlim=c(60,155),ylim=c(0,65))+
ggtitle("某公司2015~2016年度營(yíng)業(yè)狀況分布圖")+
guides(fill=guide_legend(reverse=TRUE,title=NULL))+
theme_map() %+replace%
theme(title=element_text(family="myfont"),legend.position=c(0.88,0.3),legend.text.align=1)
ok,這次成功了,但是我放棄了使用coord_map()空間投影參數(shù),而是使用了普通的笛卡爾二維坐標(biāo)。
在ggplot2版面中制作數(shù)據(jù)對(duì)圖,想要對(duì)版面進(jìn)行有效的控制,需將標(biāo)度范圍的調(diào)整參數(shù)在坐標(biāo)系內(nèi)進(jìn)行限定,否則會(huì)出現(xiàn)錯(cuò)亂,而是在限定范圍的同時(shí)可能需要放棄使用空間投影(有沒(méi)有更好的解決方案,目前還未知,留待以后解決)。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“ggplot2中怎么自定義數(shù)據(jù)地圖版面范圍”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。