Filling countries and continents with maps library according to variable value

六眼飞鱼酱① 提交于 2020-01-24 20:58:26

问题


I want to fill a map with some countries from UE, and then some continents like Asia and Africa, according to my variable prob2 values . This is my data map_d:

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

Firstly I fill the countries of Europe, using this 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")

Which produces this map: Europe Map

Now, I need to add shape of continents to my map, and fill with the value of prob2. Is possible?

I found in this post how to plot continents but is a different way to do: David Ameller's question, and Im not able to add variable values throught this code.

Thanks in advance!!


回答1:


FWIW, here's a 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()

You'll have to map your continents to the database ones, and the country names in the database to the ones you get from map_data. After that, add + geom_polygon(aes(x=long, y=lat, group=group, fill=prob2), wm, colour = NA) to your code.



来源:https://stackoverflow.com/questions/43801030/filling-countries-and-continents-with-maps-library-according-to-variable-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!