Choropleth世界地图

hk4*_*k47 2 maps r ggplot2 choropleth

我已经阅读了很多线程和文章,并且我一直在收到错误.我试图做一个合唱?使用来自全球恐怖主义数据库的数据的世界地图.我想用nkills或者那个国家的攻击次数给国家上色.我现在不在乎.因为有这么多国家的数据,所以制作任何图表来显示这些数据是不合理的.

非常感谢帮助,如果我没有正确地问这个,我真诚地道歉,我正在学习本网站的规则.

我的代码(到目前为止..)

library(maps)
library(ggplot2)
map("world")
world<- map_data("world")
gtd<- data.frame(gtd)
names(gtd)<- tolower(names(gtd))
gtd$country_txt<- tolower(rownames(gtd))
demo<- merge(world, gts, sort=FALSE, by="country_txt")
Run Code Online (Sandbox Code Playgroud)

在gtd数据框中,countries列的名称是"country_txt",所以我想我会使用它,但是我在fix.by中遇到错误(by.x,x):'by'必须指定唯一有效的列

如果这样可以工作,我会在几个网站上看到我的情节.我老实说已经这么长时间了,我已经阅读了很多代码/其他类似的问题/网站/手册等等.我会接受我很无能,当谈到R很乐意寻求帮助时.

jlh*_*ard 8

像这样的东西?这是使用rgdal和的解决方案ggplot.我很久以前就放弃了使用基础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="")
Run Code Online (Sandbox Code Playgroud)

全球恐怖主义数据库有几个版本.我使用了这里提供的完整数据集,然后对2009年的年度进行了子集化.因此,这张地图显示了恐怖主义造成的死亡人数,按国家划分,从2010-01-01到2013-01-01(此来源提供的最新数据) .这些文件以MS Excel下载的形式提供,我将其转换为csv以导入到R中.

世界地图可从shape文件GeoCommons网站.

制作等值区域图的棘手部分是将数据与正确的多边形(国家/地区)相关联.这通常是一个四步过程:

  1. 在shapefile属性表中查找一个字段,该字段映射(无双关语)到数据中的相应字段.在这种情况下,shapefile中的字段"CNTRY_NAME"似乎映射到gtd数据库中的"country_txt"字段.
  2. 在ploygon ID(存储在属性表的行名称中)和CNTRY_NAME字段之间创建关联.
  3. 使用CNTRY_NAME和country_txt将结果与您的数据合并.
  4. 将结果与使用fortify(map)- 这将ploygons与deaths(nkill)关联的数据框合并.