2017-05-31 100 views
0

我試圖使用map和ggplot2包在R中獲得Choropleth映射。我只是代表具體國家和他們具體的價值觀而感到有趣。我的數據如下:Choropleth映射的問題

GEO<-c("ES","GB","FR","DE","DK","AT","PT") 
Value<-c(0.2560,0.023,0.0120,0.158,0.0025,0.158,0.2) 
countries=c("Spain","Great Britain","France","German","Denmark","Austria","UK") 
datar<-data.frame(GEO,Value,countries) 

datar $ GEO對應於各國的ISO 2代碼名稱。

我獲得使用這個腳本地區分佈圖:

mapa<-fortify(map(regions=datar$countries,col="grey20",fill=TRUE,plot=FALSE)) 

gg <- ggplot() 
gg <- gg + geom_map(data=mapa, map=mapa, 
       aes(x=long, y=lat, map_id=region), 
       fill="white", color="black") 
gg<- gg +geom_map(data=datar, map=mapa, 
       aes(map_id=countries,fill=Value),color="blue",size=0.25) 
gg <- gg + coord_map() 
gg <- gg + theme_bw() 
gg 

這裏的地圖: enter image description here

第一個問題是篦英國是不是在圖片。我試圖將命名改爲「英國」。這是代表納米比亞不是英格蘭的最糟糕..我試圖尋找英國的正確名稱,但沒有發現任何東西!有人知道嗎?達諾爾$ GEO甚至不產生積[錯誤連接seq_len(nrow(數據) - 1):參數必須是強制轉換到非負整數]

二。我想創建一個紅色的色階從0到0.5。我應該在哪裏以及如何做到這一點?

而在去年,我怎樣才能刪除lat和長數字,與背景的線條和方形一起。

謝謝!

+0

'map()'函數來自哪裏?你應該包括外部包使用 – GGamba

+0

地圖()來自地圖包 – Cebs

回答

2

事實上有一個簡單的修復。 數據。frame()默認將字符向量轉換爲一個因子,這可能會以多種方式混淆代碼。你可能看到的警告有關:

Warning message: 
In `[<-.factor`(`*tmp*`, iexp, value = "UK$)|(^UK:") : 
    invalid factor level, NA generated 

因此,我們確實需要在「大不列顛」或「英國」代替使用「英國」,但可以通過使用

datar <- data.frame(GEO,Value,countries, stringsAsFactors=FALSE) 
避免納米比亞

這個因素的錯誤只會在英國出現,因爲「英國」與「烏克蘭」之間的糾纏不清。我將在下一個版本(3.2)的地圖中解決這個問題。

1

geom_map()總是有點痛對付的,我瞭解到。

大不列顛正確的代碼確實是UK,但相反,你搜索,它具有分區域的其他國家。只搜索UK將返回NA,這(奇怪)將返回NAmibia
解決的辦法是搜索UK:

順便說一句,你可以使用map_data()而不是fortify(map(..))

library(ggplot2) 
library(maps) 

datar <- data.frame(GEO = c("ES","UK","FR","DE","DK","AT","PT"), 
        Value = c(0.2560,0.023,0.0120,0.158,0.0025,0.158,0.2), 
        search_countries = factor(c("Spain","UK:","France","Germany","Denmark","Austria", "Portugal")), 
        countries = c("Spain","UK","France","Germany","Denmark","Austria", "Portugal") 
) 

mapa <- map_data('world', region = datar$search_countries) 

我們仍然需要countries列,因爲他們原本,加入mapadatar

ggplot() + 
    geom_map(data = mapa, map = mapa, aes(x = long, y = lat,map_id = region)) + 
    geom_map(data = datar, map = mapa, aes(fill = Value, map_id = countries), color ='black', size = .25) + 
    coord_map() 
#> Warning: Ignoring unknown aesthetics: x, y 

這就是geom_map怪事出來。但你可能已經知道,當你正確地繪製2 geom_map和有關要求,但警告x & y美學的怪事。


最後要做的是修復填充縮放,並刪除不需要的主題的元素(你可以做到使用theme_void()相同的結果)

last_plot() + 
    scale_fill_gradient(low = 'white', high = 'red', limits = c(0, .5)) + 
    theme(panel.background = element_rect(colour = 'black', fill = 'white'), 
     axis.line = element_blank(), 
     axis.ticks = element_blank(), 
     axis.text = element_blank(), 
     axis.title = element_blank()) 

+0

太棒了!非常感謝! – Cebs

+1

作爲關於需要結腸「英國:」的評論:這實際上源自這樣一個事實,即「英國」本身也適合「烏克蘭」(這在20年前決定使用「英國」時並不存在) 「而不是」英國「爲了保持兼容性,3.x地圖現在將普通的」英國「變成了一個醜陋的正則表達式,顯然混淆了geom_map(),導致了」NA「。 –