用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存的是我感兴趣的城市的名称,只要对应一下就可以了,很方便。

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

Posted by Liyun

    相关文章:

Trackback URL : trackback

11 Responses to “用R画(中国)地图”

  1. Yihui June 23rd, 2011 at 10:12 pm


    这票号数据哪里找的啊?

    回复此评论

    Reply by liyun

    that's a real pain...i will send you the paper later on when iam back in barsa...

  2. Feng June 24th, 2011 at 7:33 pm


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

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

    回复此评论

    Reply by liyun

    that's why...i also felt it strange...but i used the command plot directly. what else should be done as well then?

    Reply by liyun

    you have been in bcn? why didnot contact with me...

  3. Feng June 26th, 2011 at 11:51 am


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

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

    回复此评论

    Reply by liyun

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

  4. niukou August 4th, 2011 at 11:49 am


    我想画图,可是maptools从哪里来呢

    回复此评论

    Reply by liyun

    在R里直接安装maptools这个包即可 :) 它也是一个package.

  5. 上等兵 August 19th, 2011 at 9:10 am


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

    回复此评论

    Reply by cloudly

    请您直接发邮件给我吧!我的邮箱是cloudlychen@gmail.com

您想说点啥?

XHTML: 您可以使用下列标签来丰富您的评论: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

达则兼济天下, 穷则独善其身。 …… 或曰,兼济则达,独善则穷。

我正在关注的:

社会网络,信息传递,实验经济学,小额贷款...

一点点声明

怕下次找不到门?直接google“落园”呗。

落园是我的非学术博客,只是为了娱乐大众。如果您对学术感兴趣,请移步我的英文博客或查看我的简历

最近寻找新工作中,欢迎推荐机会!我的介绍见这儿

最近常常出没的城市:

沪三角(上海、杭州等)、珠三角(珠海、深圳、香港等)、另加西安、成都。如有这些地方的朋友,欢迎提前邮件联系,一起聊聊相互学习 ^_^