簡體   English   中英

基於類別數據的Worldmap多邊形填充顏色

[英]Worldmap polygon fill color based on category data

我正在嘗試創建一個世界地圖,在該地圖上,國家根據其所屬的類別獲得不同的顏色。

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

類別來自progress.csv,可在此處找到。 類別1應該為綠色,類別2應該為紅色,類別3應該為藍色,類別4應該為灰色。 每個多邊形都有一個單獨的cowcode ,您可以通過運行data <- world@data cowcode data <- world@data來查看。 這些cowcodes在引用也progress
你也可以看到,在progress的唯一國家類別1至3每一個國家,是不是在progress為4類。

問題是:如何使用progress數據將正確的多邊形着色為正確的顏色? 我應該搜索什么,該怎么辦? (我也只能使用plot())。

任何幫助是極大的贊賞。

這是一個帶有plot :所需要的只是將類別數據與顏色合並,並將COWDATA與正在進行的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)

在此處輸入圖片說明

因此,根據OP的評論,這是一個ggplot解決方案。

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. 根據母牛代碼將類別與ID關聯: mrg<-merge(...)
  3. 將世界轉換為適合ggplot使用的格式: map.df<-fortify(...)
  4. 將類別與地圖坐標關聯: map.df<-merge(...)
  5. 生成並渲染地圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM