r - 使用国家名称的空间可视化 - R
问题描述
我有一个包含几列的数据框,我想在其中可视化一些信息。我想使用世界地图显示信息。像这样:
在我的数据框中,我有一列包含国家名称,但我没有纬度/经度信息。我怎样才能只使用国家名称来制作这个情节?
解决方案
很多选择。一个是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()
推荐阅读
- arrays - 使用 CosmosDB 对 2D 结果集中的列求和
- javascript - 如何在 HTML 上忽略匹配的隐藏对象?
- sortablejs - 嵌套列表(树) - 如何通过向右拖动来嵌套元素?
- html - 文本溢出省略号不适用于标题标签
- python-3.x - 如何修复“如果使用所有标量值,则必须传递索引”错误?
- flutter - 格子视图构建器,其项目的随机宽度颤动
- angular - 从 ASP.NET Core 3.1 应用程序生成的 Angular TypeScript 客户端无法正常工作
- python - Dask - 将多列合并为一列
- google-apps-script - 当副本由工作表制作时,如何保留 Google Appscript 触发器?
- ios - 无法在模拟器上构建