2016-08-11 88 views
3

我想繪製使用R地圖庫的特定國家的特定顏色。我可以填寫顏色,但他們與各自國家的關係不正確。我想知道有人能夠知道爲什麼嗎?如何在R地圖庫中繪製正確的顏色

我的數據幀是«filld»並有3列:第一是國家的名字,第二個是隻是一些數字數據,並且第三是色彩:

   countries toplot  color 
1    Argentina  -1  red 
2    Armenia  -1  red 
3    Australia  -1  red 
4    Bahrain  -1  red 
5    Botswana  -1  red 
6    Belgium  -1  red 
7    Bulgaria  -1  red 
8    Canada  -1  red 
9     Chile  -1  red 
10    Taiwan  -1  red 
11    Croatia  -1  red 
12  Czech Republic  -1  red 
13  UK:Great Britain  -1  red 
14    Egypt  -1  red 
15    Denmark  -1  red 
16    Finland  0 yellow 
17    France  0 yellow 
18    Georgia  0 yellow 
19    Germany  0 yellow 
20  China:Hong Kong  0 yellow 
21    Hungary  0 yellow 
22   Indonesia  0 yellow 
23     Iran  0 yellow 
24    Ireland  0 yellow 
25    Israel  0 yellow 
26    Italy  0 yellow 
27    Japan  0 yellow 
28    Jordan  0 yellow 
29   Kazakhstan  1 darkgreen 
30    Korea  1 darkgreen 
31    Kuwait  1 darkgreen 
32    Lebanon  1 darkgreen 
33   Lithuania  1 darkgreen 
34    Malaysia  1 darkgreen 
35    Malta  1 darkgreen 
36    Morocco  1 darkgreen 
37   Netherlands  1 darkgreen 
38   New Zealand  1 darkgreen 
39 UK:Northern Ireland  1 darkgreen 
40    Norway  1 darkgreen 
41     Oman  1 darkgreen 
42   Palestine  1 darkgreen 
43    Poland  1 darkgreen 
44    Portugal  1 darkgreen 
45    Qatar  1 darkgreen 
46    Russia  1 darkgreen 
47   Saudi Arabia  0 yellow 
48    Serbia  0 yellow 
49   Singapore  0 yellow 
50  Slovak Republic  0 yellow 
51    Slovenia  -1  red 
52   South Africa  -1  red 
53    Spain  -1  red 
54    Sweden  -1  red 
55    Thailand  1 darkgreen 
56    Turkey  1 darkgreen 
57 United Arab Emirates  0 yellow 
58     USA  1 darkgreen 

這是我的代碼現在用:

library(maps)  # Provides functions that let us plot the maps 
library(mapdata) # Contains the hi-resolution points that mark out the countries. 

map('world', filld$countries, fill=T, border="darkgray", col=filld$color) 
map('world', col="darkgray", add=T) 

但是,這是我得到的顏色: Worldmap with wrong colors 澳大利亞應填充爲紅色,但綠色;西班牙應該是紅色的,但是是黃色的;法國應該填充黃色,但它是深綠色的,等等...... 一些國家還可以,例如美國應該是深綠色的。

任何意見將不勝感激。謝謝!

+0

看看GGPLOT2 :: geom_map –

+0

感謝理查德德福。我可以使用ggplot來繪製顏色:但現在的問題是如何用顏色添加圖例......陳述「低於平均值 - 紅色」,「意思是 - 黃色」和「高於平均值 - 綠色」?我不能使用傳奇...... – JPMD

回答

4

我不完全確定是什麼造成了這個問題,但是先繪製世界然後用顏色填充確實是個訣竅。

map('world', col='darkgray') 
for (color in unique(filld$color)) { 
    map('world', regions=filld$countries[which(filld$color==color)], fill=T, border="darkgray", col=color,add=T) 
} 

enter image description here

0

繼@Richard建議:

library(maps) 
library(ggplot2) 

map <- map_data("world") 
map <- subset(map, region!="Antarctica") 
map <- spTransform(map, CRS("+proj=robin")) #Not working, don't know why... 
TimssCountries<-ggplot() + 
    geom_polygon(data = map, aes(x=long, y = lat, group = group), fill = NA, colour="darkgray", size=0.25)+ 
    geom_map(data=filld,map=map,aes(map_id=country, x=lon, y=lat), fill = "filld$color", colour = "gray") + 
    coord_equal() 
TimssCountries 

Map colors

但是,我不知道如何與ggplot增添色彩的傳說,因此也有類似的影響到其他地圖:

enter image description here

謝謝!...

1

原問題的原因是

map('world', filld$countries, fill=T, border="darkgray", col=filld$color) 

不返回一組多邊形完全相同的長度與顏色向量。如果一個國家由多個多邊形(如島嶼)組成,這些都是分開的。日本,只給出一個在您的數據中出現的例子,由34個多邊形組成:

z <- map('world',region='japan') 
z$names 

所以顏色不再正確對齊。

您可以簡單地添加選項exact=TRUE,但只有每個國家/地區的主要多邊形纔會被着色(與名稱完全吻合的那個),甚至沒有爲所有國家定義。

爲了與「地圖」包choropleths,最好的解決辦法是使用match.map(),這給連續號碼所選擇的地區(所有多邊形):

sel_c <- match.map("world",filld$countries) 
map('world',col=filld$col[sel_c],border="darkgrey",fill=TRUE) 
0

只是爲了referece如果有人正在尋找類似的解決方案:scale_fill_identity以正確的順序繪製顏色。完整的代碼是:

TimssDif<-TimssCountries + 
    geom_map(data = data, map = map, aes(map_id = country, fill = color), colour="darkgray") + 
    theme(legend.title = element_blank()) + # omit plot title saying 'color' 
    scale_fill_identity("Title legend", labels = c("Below mean", "At mean", "Above mean"), breaks = plotclr, guide = "legend") 
TimssDif + theme(legend.position = "bottom") 

enter image description here

+1

美國應該是深綠色嗎?還有一些國家不見了。 – jgadoury

+0

對不起,不再使用第一篇文章中的表格......只是概念驗證 – JPMD

+0

另外map_data函數分割區域和子區域。這就是爲什麼你不看英國。要添加英國:英國,你必須將它們連接在一起(遵循Alex Deckmyn的建議):' map $ region [which(map $ subregion ==「Great Britain」)] =「UK:Great Britain」 map $ region [其中(map $ subregion ==「Northern Ireland」)] =「UK:Northern Ireland」 map $ region [其中(map $ subregion ==「Hong Kong」)] =「中國:香港」 – JPMD