基于R中数值的着色图

时间:2013-10-12 14:01:06

标签: r dictionary

我有一个与 R 相关的问题。我正在尝试根据数值为地图上不同国家/地区的区域着色。现在,我没有所有国家的价值观,所以其中一些将是空的。

Year    Country       Numeric
2009    Afghanistan   

喜欢这个。因此,当我获得基于某个级别的值,例如> 5,5-10等时,我想用不同的颜色填充它们。我怎么能在 R 中做到这一点?我花了很长时间没有取得重大进展。

我可以填写世界地图,但不能为我拥有的数据操纵它。

> p <- ggplot(world, aes(long,lat,group=group)) + 
  geom_polygon(fill="darkgreen",colour="white") +
  theme(panel.background = element_rect(fill = "lightsteelblue2"))

任何建议和提示将不胜感激!

3 个答案:

答案 0 :(得分:3)

你可以使用rworldmap(它具有现代地图的优点,包括例如S.Sudan和排除例如苏联)。地图有3种分辨率(默认值最适合全球地图。

library(rworldmap)

#example data including an NA
country <- c('Afghanistan','Albania','Algeria','Andorra','Angola','Antigua and Barbuda')
data <- c(NA, 8.53, 8.64, 21.25, 10.08, 9.07)

dF <- data.frame(country=country, data=data)

#join data to a map to create a spatialPolygonsDataFrame
sPDF <- joinCountryData2Map(dF, joinCode='NAME', nameJoinColumn='country')

#default map (see rworldmap documentation for options e.g. catMethod, numCats, colourPalette, mapRegion)
#missingCountryCol used for NA and countries not in the join file
mapCountryData(sPDF, nameColumnToPlot='data', missingCountryCol='dark grey')

rworldmap plot

答案 1 :(得分:2)

fill作为aes

的一部分加入
library(maps)
world<-map_data("world")

set.seed(123)
w2<-data.frame(world,data=sample(10,length(unique(world$group)),T)[world$group])

ggplot(w2,aes(long,lat,group=group,fill=data))+
    geom_polygon(color="white")+
    scale_fill_gradient(low="lightgreen",high="darkgreen")+
    theme(panel.background = element_rect(fill = "lightsteelblue2"))

enter image description here

答案 2 :(得分:1)

这基本上是我用来解决我需要做的事情的代码:

library(xlsx)
library(maps)
library(maptools)
library(mapproj)
library(mapdata)
library(rworldmap)
library(countrycode)

d <- read.xlsx("health_expenditure.xlsx",2)
d.df <- data.frame(d)
d.sub <- subset(d.df,Year=="2009")
w4 <- data.frame(d.sub$Country,data=d.sub$Numeric.Value)
colnames(w4)[1] <- "country"
w4$breaks <- cut(w4$data, 5)
w4$code <- countrycode(w4$country,"country.name","iso3c")
sPDF <- joinCountryData2Map(w4,joinCode="ISO3",nameJoinColumn="code")
par(mai=c(0,0,0.2,0),xaxs="i",yaxs="i")
mapDevice()
mapCountryData(mapToPlot=sPDF, nameColumnToPlot="breaks",missingCountryCol="white",oceanCol="lightsteelblue2",colourPalette="heat",mapTitle="Health Expenditure")

Health Expenditure in 2009