使用R画地图越来越方便了,很多包都很好用,比如rwordmap, ggmap,googleVis等。本文介绍使用rworldmap来绘制国家间的地图。
使用rworldmap这个包可以参考这个vignette。介绍的相对比较详细:http://cran.r-project.org/web/packages/rworldmap/vignettes/rworldmap.pdf
为国家画地图最常见的问题是那个国家也许根本就有争议,可能现有的地图数据里没有这个国家编码,因此是“一个地图上不存在的国家”。
这里是rworldmap包中所包含的244个国家的数据,主要是有关于生态方面的,比如生物多样性等。data(countryExData)names(countryExData)sort(unique(countryExData$Country))
我用的一个包含国家信息的数据中的国家名字列表是my_country。结果发现八个国家或地区不在这244个国家数据中。
uname = unique(my_country)[which(!unique(my_country) %in%countryExData$Country)]# [1] "Singapore" "Palestinian Territory" "Czech Republic" "Ivory Coast" # [5] "Gambia" "Afghanistan" "Timor-Leste" "Hong Kong S.A.R."
其中最有争议的当属巴勒斯坦了:
“巴勒斯坦地區因歷史上的各種複雜糾葛,使得猶太人和阿拉伯人皆認為該地區是他們的固有領土,並不惜為此訴諸武力。現今在政治上主要分為以色列國和巴勒斯坦國兩個國家,前者為猶太人所建立,後者為阿拉伯人所建立。但即使如此仍未能解決以巴問題,以巴衝突至今仍然延續。巴勒斯坦地區總面積27090km²”。资料来源见中文维基百科:http://zh.wikipedia.org/wiki/巴勒斯坦
比如,大谷歌地图就不列入巴勒斯坦:
怎么画出这个有争议的地区附近的国家呢?解决方法是根据iso3编码来。rworldmap提供了rwmGetISO3命令来为国家名字提取iso3编码。
library(rworldmap)
countries = c("palestine", "israel", "jordan", "lebanon","Syria", "iraq", "Saudi Arabia")country_iso3 = unlist(lapply(countries, rwmGetISO3))mmap = data.frame(country = country_iso3, Value = c(10, 5, 4,3, 2, 1, 3))# 把我的数据和rworldmap中的国家数据join在一起。mmaps = joinCountryData2Map(mmap, joinCode = "ISO3",nameJoinColumn = "country")# 可以画图了。
mapCountryData(mmaps, nameColumnToPlot="Value",#mapRegion="Eurasia", xlim = c(40, 50), ylim = c(10, 50), colourPalette="terrain", mapTitle = "", lwd = 1)
#http://nominatim.openstreetmap.org/search.php?q=israel&viewbox=-126.57,51.79,126.57,-51.79
还可以画气泡图,如下:mapBubbles(dF=mmaps, nameZSize="Value", nameZColour ="Value", xlim =c(40, 50), ylim =c(10, 50), addLegend=FALSE)
既然大家看到了这里,我就再多放两张图吧:
画成气泡图更好一些:
如果你喜欢一个颜色的,更醒目些:
