2017-05-05 6 views
1

Ich möchte eine Karte mit einigen Ländern von UE, und dann einige Kontinente wie Asien und Afrika, nach meiner Variablen prob2 Werte füllen. Dies ist meine Daten map_d:Füllen von Ländern und Kontinenten mit Kartenbibliothek nach Variablenwert

state prob2 
<chr> <dbl> 
Germany 0.6 
Austria 2.9 
Belgium 1.9 
Bulgaria 0.6 
Cyprus 0.0 
Croatia 1.7 
... 
Other Asian 9.2 
Other African 2.5 
Other North American 10.7 
Other Latin American 2.3 
Other Oceania 5.0 

Zum einen habe ich die Länder Europas zu füllen, mit diesem Code:

europ_map <- map_data("world", region = c(
    "Germany", 
"Austria", 
"Belgium", 
"Bulgaria", 
"Chipre", 
"Croacia", 
"Denmark", 
"Slovakia", 
"Slovenia", 
"Spain", 
"Estonia", 
"Finland", 
"France", 
"Greece", 
"Hungary", 
"Ireland", 
"Italy", 
"Latvia", 
"Lithuania", 
"Luxembourg", 
"Malta", 
"Norway", 
"Netherlands", 
"Poland", 
"Portugal", 
"UK", 
"Czech Republic", 
"Romania", 
"Sweden")) 

fin_map <- merge(europ_map, map_d, by.x="region", by.y="state") 
library(plyr) 
fin_map <- arrange(fin_map, group, order) 

ggplot(fin_map, aes(x=long, y=lat, group=group, fill=prob2)) + 
    geom_polygon(colour = "white") + 
    coord_map("polyconic") 

Welche diese Karte erzeugt: Europe Map

Nun, ich brauche Form hinzufügen von Kontinenten zu meiner Karte und fülle mit dem Wert prob2. Ist möglich?

Ich fand in diesem Beitrag, wie man Kontinente zeichnet, aber es ist ein anderer Weg zu tun: David Ameller's question, und ich bin nicht in der Lage, variable Werte durch diesen Code hinzuzufügen.

Vielen Dank im Voraus!

Antwort

0

FWIW, hier ist ein Starter:

library(tidyverse) 
wm <- map_data("world") 
cc <- raster::ccodes() 
head(cc[,c(1:3, 8:10)], 3) 
#   NAME ISO3 ISO2  UNREGION1 UNREGION2  CONTINENT 
# 1  Aruba ABW AW  Caribbean Americas South America 
# 2 Afghanistan AFG AF Southern Asia  Asia   Asia 
# 3  Angola AGO AO Middle Africa Africa  Africa 
dat <- read.csv(text="state, prob2 
Other Asian, 9.2 
Other African, 2.5 
Other North American, 10.7 
Other Latin American, 2.3 
Other Oceania, 5.0") 
mappings <- c("Asia"="Other Asian", "Africa"="Other African") # you add the others here 
cc$MYCONTINENTS <- mappings[cc$CONTINENT] 
cc <- left_join(cc, dat, by = c("MYCONTINENTS"="state")) 

## 31 country names need to be mapped... 
wm$region %>% unique %>% setdiff(cc$NAME) 
# ...       
# [7] "Canary Islands" "UK" "Heard Island"  
# ... 
## For example, UK is called United Kingdom in cc: 
unique(grep("Kingdom", cc$NAME, value=T, ignore.case=T)) 
# [1] "United Kingdom" 

mappings <- c("UK"="United Kingdom", "USA"="United States") # You add the others here 
cc$NAME[match(mappings, cc$NAME)] <- names(mappings) 

wm <- left_join(wm, cc[,c("NAME","MYCONTINENTS", "prob2")], by=c("region"="NAME")) 
ggplot() + 
    geom_polygon(aes(x=long, y=lat, group=group, fill=prob2), wm, colour = NA) + 
    coord_quickmap() 

enter image description here

Sie werden Ihre Kontinente auf die Datenbank formieren müssen, und die Ländernamen in der Datenbank zu denen, die Sie von map_data bekommen. Fügen Sie anschließend Ihrem Code + geom_polygon(aes(x=long, y=lat, group=group, fill=prob2), wm, colour = NA) hinzu.

+0

Super! Vielen Dank, es funktioniert perfekt. :) –

Verwandte Themen