溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ggplot2中怎么自定義數(shù)據(jù)地圖版面范圍

發(fā)布時(shí)間:2021-12-03 17:49:09 來(lái)源:億速云 閱讀:351 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹了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)。

ggplot2中怎么自定義數(shù)據(jù)地圖版面范圍

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)

ggplot2中怎么自定義數(shù)據(jù)地圖版面范圍

倘若我想將該地圖版面聚焦到中國(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)

ggplot2中怎么自定義數(shù)據(jù)地圖版面范圍

切割效果如下,有反饋但是效果不佳,未達(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)

ggplot2中怎么自定義數(shù)據(jù)地圖版面范圍

這次結(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)

ggplot2中怎么自定義數(shù)據(jù)地圖版面范圍

第三種方案又以失敗告終,結(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)

ggplot2中怎么自定義數(shù)據(jù)地圖版面范圍

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í)!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI