r - 等值线世界地图

标签 r ggplot2 maps choropleth

我读了很多帖子和文章,但不断出现错误。我正在尝试制作一个等值线?使用我从全局恐怖主义数据库获得的数据绘制的世界地图。我想根据击杀次数或仅根据该国家/地区的攻击次数对国家进行着色。我现在不在乎。由于拥有数据的国家太多,因此绘制任何图表来显示这些数据是不合理的。

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

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

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")

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

如果这可行,我会像我在一些网站上看到的那样进行绘制。 老实说,我已经在这方面工作了很长时间,并且阅读了很多代码/其他类似问题/网站/R 手册等。我会接受我在 R 方面的无能,很乐意寻求一些帮助。

最佳答案

有这样的事吗?这是使用 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="")

全局恐怖主义数据库有多个版本。我使用了可用的完整数据集 here ,然后对 > 2009 年进行子集化。因此,此 map 显示了 2010-01-01 至 2013-01-01 期间按国家/地区划分的恐怖主义造成的总死亡人数(此来源提供的最后数据)。这些文件可作为 MS Excel 下载,我将其转换为 csv 以导入到 R 中。

world map可从 GeoCommons website 以 shapefile 形式获取.

制作分区统计图的棘手部分是将数据与正确的多边形(国家/地区)关联起来。这通常是一个四个步骤的过程:

  1. 在 shapefile 属性表中查找一个映射(无双关语)到数据中相应字段的字段。在本例中,shapefile 中的字段“CNTRY_NAME”似乎映射到 gtd 数据库中的字段“country_txt”。
  2. 在多边形 ID(存储在属性表的行名称中)和 CNTRY_NAME 字段之间创建关联。
  3. 使用 CNTRY_NAME 和country_txt 将结果与您的数据合并。
  4. 将结果与使用 fortify(map) 创建的数据框合并 - 这会将多角形与死亡关联起来 (nkill)。

关于r - 等值线世界地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22625119/

相关文章:

r - 从 github 安装包时出错

reactjs - 纬度的值不能在 native react 中从字符串转换为 double

r - 矩阵 %in% 矩阵

c - DEoptim 在 R 中似乎卡住

r - 在 R 中绘制数据;错误 : default method not implemented for type 'list'

r - ggplot2 中密度图叠加中的警告消息

R ggplot 2 : how to set geom point alpha based on another variable?

r - ggplot 为每个组绘制特定边界?

R ggplot2 : draw multiple line segments connecting pairs of points on map

javascript - 如何在使用 Leaflet.Draw 绘制多边形时更改第一个顶点的颜色?