像这样的东西?这是一个使用rgdal
and的解决方案ggplot
。我很久以前就放弃了使用 base R 来处理这类事情。
library(rgdal) # for readOGR(...)
library(RColorBrewer) # for brewer.pal(...)
library(ggplot2)
setwd(" < directory with all files >")
gtd <- read.csv("globalterrorismdb_1213dist.csv")
gtd.recent <- gtd[gtd$iyear>2009,]
gtd.recent <- aggregate(nkill~country_txt,gtd.recent,sum)
world <- readOGR(dsn=".",
layer="world_country_admin_boundary_shapefile_with_fips_codes")
countries <- world@data
countries <- cbind(id=rownames(countries),countries)
countries <- merge(countries,gtd.recent,
by.x="CNTRY_NAME", by.y="country_txt", all.x=T)
map.df <- fortify(world)
map.df <- merge(map.df,countries, by="id")
ggplot(map.df, aes(x=long,y=lat,group=group)) +
geom_polygon(aes(fill=nkill))+
geom_path(colour="grey50")+
scale_fill_gradientn(name="Deaths",
colours=rev(brewer.pal(9,"Spectral")),
na.value="white")+
coord_fixed()+labs(x="",y="")
全球恐怖主义数据库有多个版本。我使用了此处可用的完整数据集,然后对 > 2009 年进行了子集化。因此,这张地图按国家/地区显示了从 2010 年 1 月 1 日到 2013 年 1 月 1 日的总死亡人数(此来源提供的最后数据) . 这些文件可作为 MS Excel 下载获得,我将其转换为 csv 以导入 R。
世界地图可从GeoCommons 网站以 shapefile 形式获得。
制作等值线图的棘手部分是将您的数据与正确的多边形(国家)相关联。这通常是一个四步过程:
- 在 shapefile 属性表中查找映射(没有双关语)到数据中相应字段的字段。在这种情况下,shapefile 中的字段“CNTRY_NAME”似乎映射到 gtd 数据库中的字段“country_txt”。
- 在 ploygon ID(存储在属性表的行名中)和 CNTRY_NAME 字段之间创建关联。
- 使用 CNTRY_NAME 和 country_txt 将结果与您的数据合并。
fortify(map)
将结果与使用- 这将多边形与死亡 ( )创建的数据框合并nkill
。