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很乐意寻求帮助时.
像这样的东西?这是使用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网站.
制作等值区域图的棘手部分是将数据与正确的多边形(国家/地区)相关联.这通常是一个四步过程:
fortify(map)
- 这将ploygons与deaths(nkill
)关联的数据框合并. 归档时间: |
|
查看次数: |
5410 次 |
最近记录: |