您好,登錄后才能下訂單哦!
這篇文章主要介紹了ggplot2中怎么自定義數據地圖版面范圍,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
之前聯系過程中遇到的一個小技術問題,就是在ggplot2制作數據地圖時,使用標度調整參數進行范圍限定時,總是出現錯誤,版面上出現交錯的線條和條帶。
應該是自己添加的標度限定參數與ggplot2映射規則出現了沖突,特別再加上空間投影參數,這種沖突和錯亂就顯得更加明顯。
其實我就是想要獲取這樣一幅數據地圖,而不是做完整個世界地圖之后再去裁剪導出的圖片。(那樣會顯得很不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年度營業狀況分布圖")+
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)
倘若我想將該地圖版面聚焦到中國的領土范圍內,但是呢,又不想單獨呈現孤零零的中國地圖,我需要中國周邊的這些鄰國邊界,來鎖定中國在亞洲地區的大致位置,這些周邊領國邊界不要求都擁完整的行政區劃,可以根據版面的需要,進行矩形切割就行。
這樣看起來必須對世界地圖進行切割,而且需要切割的是美學映射參數x,y的范圍(也就是坐標系統的范圍)。
我們都知道在ggplot2系統中,調整X,Y的標度范圍擁有布置一個的可選參數:
xlim/ylim
expand_limits()
scale_x/y_continuous()
其實坐標軸系統中也可以嵌入標度調整參數:
coord_map()
那么應該使用哪個方法進行調整呢,這里就賣個關子,我們一個一個來嘗試:
切割的范圍為:
經度:60~155
維度:0~65
這個范圍剛好可以涵蓋我國領土的完整范圍:
方案一: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年度營業狀況分布圖")+
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)
切割效果如下,有反饋但是效果不佳,未達到目的,第一種方案宣告失敗。
方案二: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年度營業狀況分布圖")+
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)
這次結果又失敗了,不僅沒有完成目標,底部還出現了一條莫名其妙的線條。
方案三: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年度營業狀況分布圖")+
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)
第三種方案又以失敗告終,結果跟第一種的問題一模一樣。
那么現在就剩最后一一種方案啦,希望這次能成功。
方案四: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年度營業狀況分布圖")+
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()空間投影參數,而是使用了普通的笛卡爾二維坐標。
在ggplot2版面中制作數據對圖,想要對版面進行有效的控制,需將標度范圍的調整參數在坐標系內進行限定,否則會出現錯亂,而是在限定范圍的同時可能需要放棄使用空間投影(有沒有更好的解決方案,目前還未知,留待以后解決)。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“ggplot2中怎么自定義數據地圖版面范圍”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。