我有一个与 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"))
任何建议和提示将不胜感激!
答案 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')
答案 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"))
答案 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")