首页 > 解决方案 > 使用国家名称的空间可视化 - R

问题描述

我有一个包含几列的数据框,我想在其中可视化一些信息。我想使用世界地图显示信息。像这样:

在此处输入图像描述

在我的数据框中,我有一列包含国家名称,但我没有纬度/经度信息。我怎样才能只使用国家名称来制作这个情节?

标签: rggmap

解决方案


很多选择。一个是rworldmap包。

library(rworldmap)

我们需要一些数据来映射。

COVID <- read.csv("https://opendata.ecdc.europa.eu/covid19/casedistribution/csv", na.strings = "", fileEncoding = "UTF-8-BOM")

聚合以获取总病例数。

library(dplyr)

CASES <- COVID %>% group_by(countriesAndTerritories) %>%
  summarise(`Total cases` = sum(cases)) %>%
  mutate(countriesAndTerritories=gsub("_", " ", countriesAndTerritories))        

如果您已经获得了数据,那么您可以从这里开始。只需两步。

步骤 1. 使用您自己的数据加入地图,使用“名称”joinCode和您的数据中代表国家名称的变量名称nameJoinColumn

COVID.map <- joinCountryData2Map(CASES, joinCode = "NAME", nameJoinColumn = "countriesAndTerritories")

步骤 2. 绘制此对象。

par(mar=c(0,0,1,0))
mapCountryData(COVID.map, nameColumnToPlot="Total cases")

在此处输入图像描述

这不是一张特别有用的地图,因为数据高度倾斜。但是你可以看到它是多么容易。最困难的部分是确保您的国家名称与包裹中的名称相匹配。您可以从以下位置看到这些:

countryRegions$ADMIN
[1] "Afghanistan"                  "Akrotiri Sovereign Base Area" "Aland"                       
[4] "Albania"                      "Algeria"                      "American Samoa"

还有一个国家同义词数据库:

countrySynonyms 

一个ggplot版本:

library(ggplot2)
library(scales)
library(sf)
library(rnaturalearth)
library(rnaturalearthdata)

world <- ne_countries(scale = "medium", returnclass = "sf")

COVID.world <- merge(world, CASES, by.x="admin", by.y="countriesAndTerritories")

ggplot(data = COVID.world) + 
  geom_sf(aes(fill=Total)) +
  scale_fill_gradient(label=comma) +
  theme_void()

在此处输入图像描述


推荐阅读