【R語(yǔ)言作圖】如何在地圖上任意位置畫餅圖直方圖等

N久不分享學(xué)習(xí)心得的小Q終于有時(shí)間冒個(gè)泡了嵌洼,這次分享一個(gè)小Q改良后的在地圖上任意畫餅圖,直方圖的R代碼(其實(shí)是摸清了數(shù)據(jù)結(jié)構(gòu)后自己多加了幾行代碼+)医咨,這里以餅圖為例倦零。

畫圖原理

1.利用R包rworldmap & rworldxtra來(lái)作圖测砂。
2.已有的map數(shù)據(jù)中一個(gè)國(guó)家對(duì)應(yīng)一個(gè)坐標(biāo)这刷,一個(gè)國(guó)家邊界,利用這些已有數(shù)據(jù)+用戶數(shù)據(jù)構(gòu)建新的畫圖數(shù)據(jù)(其他新添加的圖均是如此)鼻弧。

rworldmap包的介紹

1.如果想查看rworldmap包的情況

help(package="rworldmap")

2.了解high resolution map情況

a<-getMap(resolution = "high")
# Map是一個(gè)sp對(duì)象设江,SpatialLinesDataFrame類
# 結(jié)構(gòu)如下:
# a@data
# a@polygons
# a@plotOrder
# a@bbox
# a@proj4string

# 我們主要利用a@data和a@polygons
v<-a@data
colnames(v)
 [1] "ne_10m_adm"   "ScaleRank"   
 [3] "LabelRank"    "FeatureCla"  
 [5] "OID_"         "SOVEREIGNT"  
 [7] "SOV_A3"       "ADM0_DIF"    
 [9] "LEVEL"        "TYPE"        
[11] "ADMIN"        "ADM0_A3"     
[13] "GEOU_DIF"     "GEOUNIT"     
[15] "GU_A3"        "SU_DIF"      
[17] "SUBUNIT"      "SU_A3"       
[19] "NAME"         "ABBREV"      
[21] "POSTAL"       "NAME_FORMA"  
[23] "TERR_"        "NAME_SORT"   
[25] "MAP_COLOR"    "POP_EST"     
[27] "GDP_MD_EST"   "FIPS_10_"    
[29] "ISO_A2"       "ISO_A3"      
[31] "ISO_N3"       "ISO3"        
[33] "LON"          "LAT"         
[35] "ISO3.1"       "ADMIN.1"     
[37] "REGION"       "continent"   
[39] "GEO3major"    "GEO3"        
[41] "IMAGE24"      "GLOCAF"      
[43] "Stern"        "SRESmajor"   
[45] "SRES"         "GBD"         
[47] "AVOIDnumeric" "AVOIDname"   
[49] "LDC"          "SID"         
[51] "LLDC"
# ***這里主要使用***:
# 第11列:類對(duì)象屬性ID
# 第19列:后期繪圖匹配項(xiàng)
# 第33列:繪圖時(shí)的經(jīng)度
# 第34列:繪圖時(shí)的緯度

3.實(shí)例操作

1)輸入文件格式說(shuō)明

文件逗號(hào)分隔,每列的說(shuō)明:
1.ID
新的類對(duì)象屬性ID,自定義,等于原來(lái)map中的11列ADMIN
2.Name
后期繪圖匹配項(xiàng)攘轩,同ID即可,等于原來(lái)map中的19列NAME
3.LON
繪圖時(shí)的經(jīng)度33列LON
4.LAT
繪圖時(shí)的緯度34列LAT
注意:這里的經(jīng)緯度是你自己想要標(biāo)記餅圖的經(jīng)緯度(起到隨意標(biāo)記點(diǎn)的作用)
5.國(guó)家名
和原始map文件中的第11列ADMIN ID對(duì)應(yīng),每個(gè)國(guó)家都有一個(gè)坐標(biāo)多邊形區(qū)域叉存,必須把坐標(biāo)點(diǎn)畫在某個(gè)國(guó)家內(nèi)
6.餅圖分塊-1
7.餅圖分塊-2
8.legend名字
這里一個(gè)餅圖只分成2部分,用戶可自定義添加更多

2)畫圖的具體代碼如下:
rm(list=ls())
library(rworldmap)
library(rworldxtra)
#---------------------------------
# 讀入輸入文件
dat<-read.table("test.txt",header = T,sep=",",stringsAsFactors = F)
> dat
        ADMIN        NAME       LON      LAT     rawName  P1  P2 legendName
1 Philippines Philippines 121.41825 15.95318 Philippines 0.5 0.5 legendName
2  Bangladesh  Bangladesh  90.22658 23.88242  Bangladesh 0.4 0.6 legendName
3     Myanmar     Myanmar  96.48873 21.21545     Myanmar 0.2 0.8 legendName
#---------------------------------
# 提取原始high resolution map的數(shù)據(jù)度帮,作為map對(duì)應(yīng)的新數(shù)據(jù)
a<-getMap(resolution = "high")
rawData<-a@data[,c(11,19,33,34)]
#---------------------------------
# 注意下面的操作歼捏,因?yàn)槲业娘瀳D只區(qū)分2塊稿存,所以只需要多增加2列數(shù)據(jù)
rawData[,5]<-NaN  #  A1_freq  作圖時(shí)不出現(xiàn)
rawData[,6]<-NaN  #  A2_freq  作圖時(shí)不出現(xiàn)
colnames(rawData)<-colnames(dat)[c(1:4,6,7)]
IDname<-c()
for(i in 1:length(a@plotOrder)){IDname[i]<-a@polygons[[i]]@ID} 
#---------------------------------
#  將新數(shù)據(jù)data覆蓋原始的數(shù)據(jù)data
rawData<-rbind(rawData,dat[,c(1:4,6,7)])    #  合并新舊數(shù)據(jù)
a@data<-rawData  
#---------------------------------
#  添加新加入的城市對(duì)應(yīng)的對(duì)象屬性polygons,添加一個(gè)對(duì)象到list中
#  polygons是一個(gè)list;每個(gè)成員是一個(gè)sp
#  每個(gè)sp的polygons又是一個(gè)list瞳秽,每個(gè)成員是一個(gè)sp
#  每個(gè)sp都有其自己的對(duì)象屬性瓣履,相同或不同
#
for(i in 1:dim(dat)[1])
{
index<-which(IDname==dat[i,5])              #  獲得新坐標(biāo)點(diǎn)所在國(guó)家[第五列]在原有map中的下標(biāo)
tmpPolygon<-a@polygons[[index]]             #  提取國(guó)家的polygon信息{ID=國(guó)家名}
tmpPolygon@labpt<-as.numeric(dat[i,3:4])    #  坐標(biāo)更換為新坐標(biāo)點(diǎn)的經(jīng)緯度
tmpPolygon@ID<-dat[i,1]                     #  對(duì)象ID更換為新坐標(biāo)點(diǎn)的名字

a@polygons<-c(a@polygons,list(tmpPolygon))  #  將新生成的polygon添加到原有的polygon List中
                                            #  相當(dāng)于把新坐標(biāo)點(diǎn)的polygon信息添加到map中
                                            #  新坐標(biāo)點(diǎn)的polygon取所在國(guó)家的polygon
}
#---------------------------------
#  plot map pie
par(oma=c(0,0,0,0),
    mar=c(0,0,0,0),
    fig=c(0,1,0,1),
    mai=c(0,0,0,0)
    )

# 因?yàn)槲业娘瀳D只區(qū)分2塊,所以只需要2個(gè)顏色
color_array<-c("black","red")

mapPies(a,
        nameZs = c(colnames(a@data)[5],
                   colnames(a@data)[6]),    #  用作畫圖的兩列
        zColours=color_array,              #  不同比例的顏色
        symbolSize = 0.5,                   #  pie的大小
        addCatLegend=F,                     #  不添加默認(rèn)的legend
        oceanCol = "lightblue",
        landCol = "wheat")
legend(60,0,                            #  legend所在的橫縱坐標(biāo)/經(jīng)緯度
       legend = c(colnames(a@data)[5],
                  colnames(a@data)[6]),     #  legend中的指示文字
       fill = color_array,                 #  legend 指示box的顏色,要求順序同上zColours
       title = dat[1,8],                    #  legend title
       bty="n",                             #  不做legen的背景框
       title.adj = c(1)
       )

成品如下

地圖+餅圖
轉(zhuǎn)載請(qǐng)標(biāo)明出處和作者 ^+^

撰文&編輯:VickieQ
校對(duì):HCLO4 & 花毛

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末练俐,一起剝皮案震驚了整個(gè)濱河市袖迎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腺晾,老刑警劉巖瓢棒,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異丘喻,居然都是意外死亡脯宿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門泉粉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)连霉,“玉大人,你說(shuō)我怎么就攤上這事嗡靡《搴常” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵讨彼,是天一觀的道長(zhǎng)歉井。 經(jīng)常有香客問(wèn)我,道長(zhǎng)哈误,這世上最難降的妖魔是什么哩至? 我笑而不...
    開(kāi)封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蜜自,結(jié)果婚禮上菩貌,老公的妹妹穿的比我還像新娘。我一直安慰自己重荠,他們只是感情好箭阶,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著戈鲁,像睡著了一般仇参。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上婆殿,一...
    開(kāi)封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天诈乒,我揣著相機(jī)與錄音,去河邊找鬼鸣皂。 笑死抓谴,一個(gè)胖子當(dāng)著我的面吹牛暮蹂,可吹牛的內(nèi)容都是我干的寞缝。 我是一名探鬼主播癌压,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荆陆!你這毒婦竟也來(lái)了滩届?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤被啼,失蹤者是張志新(化名)和其女友劉穎帜消,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體浓体,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泡挺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了命浴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娄猫。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖生闲,靈堂內(nèi)的尸體忽然破棺而出媳溺,到底是詐尸還是另有隱情,我是刑警寧澤碍讯,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布悬蔽,位于F島的核電站,受9級(jí)特大地震影響捉兴,放射性物質(zhì)發(fā)生泄漏蝎困。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一倍啥、第九天 我趴在偏房一處隱蔽的房頂上張望难衰。 院中可真熱鬧,春花似錦逗栽、人聲如沸盖袭。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鳄虱。三九已至,卻和暖如春凭峡,著一層夾襖步出監(jiān)牢的瞬間拙已,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工摧冀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倍踪,地道東北人系宫。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像建车,于是被迫代替她去往敵國(guó)和親扩借。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345