世界地图多边形填充颜色基于类别数据

时间:2014-04-10 18:02:00

标签: r plot gis geospatial

我正在尝试创建一个世界地图,其中各国根据其所属的类别获得不同的颜色。

library(cshapes)
library(foreign)
world <- cshp(date=as.Date("2012-06-30"))
progress <- read.csv("progress.csv")

类别来自progress.csv,您可以找到here。 类别1应为绿色,类别2应为红色,3应为蓝色,4应为灰色。 每个多边形都有一个cowcode个人,您可以通过运行data <- world@data来查看。这些牛群代码也在progress中引用 您还会在progress中看到只有类别1到3的国家/地区。progress以外的每个国家/地区都属于第4类。

问题是:如何使用progress中的数据为正确颜色的右边多边形着色?我应该搜索什么,我该怎么做? (我也只能使用plot())。

任何帮助非常赞赏。

2 个答案:

答案 0 :(得分:1)

这是一个plot:所需要的只是将类别数据与颜色合并,并将世界中的COWDATA与正在进行的牛数合并。

library(cshapes)
library(foreign)

world <- cshp(date=as.Date("2012-06-30"))
data <- world@data
progress <- read.csv("C:/joep/progress.csv")

# create data frame containing category and matching color
cat = 1:4
col = c(4, 2, 3, NA)
catcol = data.frame(cat, col)

# merge colors progress data by category
progress = merge(x=progress, y=catcol, by.x='category', by.y='cat', all.x=T)

# merge progress data with world data by COWCODE
p = merge(x=world@data, y= progress, by.x='COWCODE', by.y='cowcode', all.x=T)
p = p[, c(1,2,ncol(p))]
p[is.na(p$col),'col'] <- 'grey'

# plot map, make sure order is correct
plot(world[order(world@data$COWCODE),], col=as.character(p$col), border=F, ylim=c(-90, 90), xlim=c(-180,180), axes=T, las=1, cex.axis=0.6)


# add legend
legend('top', legend=paste('category', 1:4), fill=c('green', 'red','blue', 'grey'), ncol=2, cex=0.6, inset=c(0,-0.1), xpd=NA)

enter image description here

答案 1 :(得分:0)

所以这是一个ggplot解决方案,根据OP的评论。

library(ggplot2)  # for fortify(...) + plotting
library(cshapes)
library(foreign)
world <- cshp(date=as.Date("2012-06-30"))
url   <- "https://dl.dropboxusercontent.com/s/2j10eu5usfmyccr/progress.csv?dl=1&token_hash=AAHgjBLIiez5OFszCL-Etaqn1ws_f8hkd4Ik3a6vrJ-bhQ"
progress <- read.csv(url)

mrg <- data.frame(id=rownames(world@data),cowcode=world@data$COWCODE)
mrg <- merge(mrg,progress[,c("cowcode","category")],by="cowcode", all.x=T)
mrg[is.na(mrg$category),]$category <- 4
map.df <- fortify(world)
map.df <- merge(map.df,mrg,by="id")
ggplot(map.df, aes(x=long,y=lat,group=group)) + 
  geom_path(colour="grey80")+
  geom_polygon(aes(fill=factor(category)))+
  scale_fill_manual(name="category", values=c("green","red","blue","grey70"))+
  theme_bw()+
  coord_fixed()

基本工作流程如下:

  1. 将多边形ID与cowcode关联:mrg<-data.frame(...)
  2. 根据cowcode:mrg<-merge(...)
  3. 将类别与id相关联
  4. 将世界转换为适合与ggplot一起使用的格式:map.df<-fortify(...)
  5. 将类别与地图坐标相关联:map.df<-merge(...)
  6. 构建并渲染地图