Categories
日常应用

用R画(中国)地图

没想到上个星期在写一篇论文(非毕业论文,毕业论文见这儿)的时候,居然需要画地图…这个,地图怎么画?虽然常年看论文人家总是轻描淡写的说一句“GIS数据来自……”,我还是对这个东西没啥概念,总觉得貌似挺麻烦似的……

一直知道R能画,taiyun展示过,yihui写到过yixuan讲解过,但是毕竟自己没有亲手做过。这次逼上梁山了,不得不搞定。于是乎,照着葫芦画瓢,比着yixuan和yihui的教程,一步步的研究,研究。

因为这次我画地图主要是画中国地图,所以GIS数据自然是关注中国的。从yihui那里找到了“国家基础地理信息系统”(中文版和我一样不给力的同学请用英文版网址:http://nfgis.nsdi.gov.cn/nfgis/english/default.htm)。然后,嗯,GIS数据就有了。扔到R里面,调用maptools包,两行代码,中国的雄鸡图就出来啦!顿时那个爽啊。

可是然后呢?呃,我要标注的是我所感兴趣的几个城市的位置,这个yixuan在“可能的拓展”里面说了一下,没有说具体的(傻瓜式)操作,yihui的地图用的是文本导入经纬度数据,我可没有现成的经纬度数据啊!我又懒得研究这个GIS对象在R中到底是怎么玩的,就对着maptools包里面的各种函数扫过去。果然,有一个函数貌似是可以读取经纬度数据的。联系起国家基础地理信息系统里面是有提供各个城市的经纬度数据的,嗯,试了试这个函数,果然可以!剩下的工作就轻松了,几行程序告诉R那几个城市是我感兴趣的,然后一个命令就上去了,再一个命令就搞定名称的一并标注了。R果然聪明啊!

成品图在此:

spread

好了,最后简单的说一下我用到的代码,方便大家复制粘帖。

library(maptools); #调用maptools包
#read data
cities=readShapePoints('chinamap/res2_4m.shp') #国家地理信息系统下载的市级经纬度数据
china=readShapePoly('chinamap/bou2_4p.shp') #国家地理信息系统下载的省级多边形数据

plot(china); #画中国地图
points(cities[cities$NAME %in% piaohao_pre1850$city,], pch = 19, col = rgb(0, 0, 0, 0.5)) #标注感兴趣的城市黑点
text(cities[cities$NAME %in% piaohao_pre1850$city,],labels=cities[cities$NAME %in% piaohao_pre1850$city,]$NAME, cex = 0.9, col = rgb(0, 0, 0, 0.7)) #标注城市名称

顺带赞一个,国家地理信息系统里面城市名分别使用中文和拼音存储的,调用的时候任意一个都可以。我的代码里面piaohao_pre1850$city存的是我感兴趣的城市的名称,只要对应一下就可以了,很方便。

(另注:汇通天下,嘿嘿~)

20 replies on “用R画(中国)地图”

你有没有发现你的雄鸡图的背有点平坦? 我没有看原代码,但是我猜你忘记考虑地球是圆的了 😛 。

btw, 我六月还在巴塞罗那待了一周来着,那海滩,那阳光,那好吃的。。。

你的数据如果是 latitude 和 longitude的话,你试着转换为 Radian 重新画一下。

我们系里开会去巴塞罗那去了一周,就住在巴塞罗那大学旁边的Casanova。可是时间紧,一直没有时间联系,下次下次:)

OK!我估计是经度和纬度吧……当时心急没细细看,哈哈。
呃,呃,下次来依旧欢迎,though I'm leaving Barcelona in July...may not be back...

你好,我需要国家地理信息方面的资料,看了你这个文章,想请教你一下,方便的话加我Q154409802或电邮

Comments are closed.