我正在尝试创建一个世界地图,其中各国根据其所属的类别获得不同的颜色。
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())。
任何帮助非常赞赏。
答案 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)
答案 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()
基本工作流程如下:
mrg<-data.frame(...)
mrg<-merge(...)
map.df<-fortify(...)
map.df<-merge(...)