使用 ggplot2 在世界地图中绘制子区域
Ploting subregions in wordmap with ggplot2
我正在尝试从名为 data
:
的数据框中绘制这些国家/地区
country value lon lat
1 Denmark 12 9.501785 56.263920
2 UK:Great Britain 13 -1.174320 52.355518
3 France 15 2.213749 46.227638
4 Germany 17 10.451526 51.165691
5 China:Hong Kong 18 114.174695 22.278315
6 Netherlands 31 5.291266 52.132633
7 New Zealand 32 174.885971 -40.900557
8 UK:Northern Ireland 33 -6.492314 54.787715
9 Norway 34 8.468946 60.472024
10 Saudi Arabia 40 45.079162 23.885942
11 Serbia 41 21.005859 44.016521
12 Singapore 42 103.819836 1.352083
13 Slovak Republic 43 101.724578 3.153870
14 Slovenia 44 14.995463 46.151241
15 South Africa 45 22.937506 -30.559482
我正在使用世界地图和 ggplot 库:
library(maps) # Provides functions that let us plot the maps
library(ggplot2) # Generic graphis engine
map = map_data("world")
map = subset(map, region!="Antarctica") #Remove Antarctica from map
Countries = ggplot() +
geom_polygon(data = map, aes(x=long, y = lat, group = group), fill = NA, colour="darkgray", size=0.5)+
geom_map(data=data,map=map,aes(map_id=country, x=lon, y=lat),fill = "cornflowerblue", colour = "gray") +
coord_equal()
Countries
我可以绘制除 UK:Great Britain
、China: Hong Kong
以外的所有国家,实际上所有其他区域和次区域由“:”分隔:
我 运行 没有关于如何使用 world_map 和 ggplot 绘制 UK:Great Britain
的想法。大家有遇到过类似的问题,或者能想到解决办法吗?提前致谢。
这实现了您正在寻找的结果,但我不确定它是否是一个非常有用的地图
library(ggplot2)
library(data.table)
library(magrittr)
map_dat <- subset(map_data("world"), region!="Antarctica")
setDT(map_dat)
# the countries you need to translate to region:subregion
colon_countries <-
grep(':', data$country, value=T) %>%
sub(':.*$', '', .) %>%
unique
# change region to region:subregion,
# for countries of interest, for rows with a value of subregion
map_dat[region %in% colon_countries,
region := ifelse(!is.na(subregion),
paste0(region, ':', subregion),
region)]
ggplot() +
geom_polygon(data = map_dat,
aes(x=long, y = lat, group = group),
fill = NA, colour="darkgray", size=0.5)+
geom_map(data = data, map = map_dat,
aes(map_id = country),
fill = "cornflowerblue", colour = 'gray') +
# probably not the projection you really want, but leaving it to match your post above
coord_equal()
geom_map 会将 data$country 中的条目匹配到 map$region。不幸的是 map_data 用第一个冒号分割区域,所以你得到 "UK" 与 data$country.
中的 "UK:Great Britain" 不匹配
一个可能的手动修复是这样更正:
map$region[which(map$subregion == "Great Britain")] <- "UK:Great Britain"
map$region[which(map$subregion == "Northern Ireland")] <- "UK:Northern Ireland"
map$region[which(map$subregion == "Hong Kong")] <- "China:Hong Kong"
我正在尝试从名为 data
:
country value lon lat
1 Denmark 12 9.501785 56.263920
2 UK:Great Britain 13 -1.174320 52.355518
3 France 15 2.213749 46.227638
4 Germany 17 10.451526 51.165691
5 China:Hong Kong 18 114.174695 22.278315
6 Netherlands 31 5.291266 52.132633
7 New Zealand 32 174.885971 -40.900557
8 UK:Northern Ireland 33 -6.492314 54.787715
9 Norway 34 8.468946 60.472024
10 Saudi Arabia 40 45.079162 23.885942
11 Serbia 41 21.005859 44.016521
12 Singapore 42 103.819836 1.352083
13 Slovak Republic 43 101.724578 3.153870
14 Slovenia 44 14.995463 46.151241
15 South Africa 45 22.937506 -30.559482
我正在使用世界地图和 ggplot 库:
library(maps) # Provides functions that let us plot the maps
library(ggplot2) # Generic graphis engine
map = map_data("world")
map = subset(map, region!="Antarctica") #Remove Antarctica from map
Countries = ggplot() +
geom_polygon(data = map, aes(x=long, y = lat, group = group), fill = NA, colour="darkgray", size=0.5)+
geom_map(data=data,map=map,aes(map_id=country, x=lon, y=lat),fill = "cornflowerblue", colour = "gray") +
coord_equal()
Countries
我可以绘制除 UK:Great Britain
、China: Hong Kong
以外的所有国家,实际上所有其他区域和次区域由“:”分隔:
我 运行 没有关于如何使用 world_map 和 ggplot 绘制 UK:Great Britain
的想法。大家有遇到过类似的问题,或者能想到解决办法吗?提前致谢。
这实现了您正在寻找的结果,但我不确定它是否是一个非常有用的地图
library(ggplot2)
library(data.table)
library(magrittr)
map_dat <- subset(map_data("world"), region!="Antarctica")
setDT(map_dat)
# the countries you need to translate to region:subregion
colon_countries <-
grep(':', data$country, value=T) %>%
sub(':.*$', '', .) %>%
unique
# change region to region:subregion,
# for countries of interest, for rows with a value of subregion
map_dat[region %in% colon_countries,
region := ifelse(!is.na(subregion),
paste0(region, ':', subregion),
region)]
ggplot() +
geom_polygon(data = map_dat,
aes(x=long, y = lat, group = group),
fill = NA, colour="darkgray", size=0.5)+
geom_map(data = data, map = map_dat,
aes(map_id = country),
fill = "cornflowerblue", colour = 'gray') +
# probably not the projection you really want, but leaving it to match your post above
coord_equal()
geom_map 会将 data$country 中的条目匹配到 map$region。不幸的是 map_data 用第一个冒号分割区域,所以你得到 "UK" 与 data$country.
中的 "UK:Great Britain" 不匹配一个可能的手动修复是这样更正:
map$region[which(map$subregion == "Great Britain")] <- "UK:Great Britain"
map$region[which(map$subregion == "Northern Ireland")] <- "UK:Northern Ireland"
map$region[which(map$subregion == "Hong Kong")] <- "China:Hong Kong"