用R画地图数据
首先,先下载中国地图的GIS数据,这是一个压缩包,完全解压后包含三个文件(bou2_4p.dbf、bou2_4p.shp和bou2_4p.shx),将这三个文件解压到同一个目录下。
![bd8e5663e1aed5af6cc65bcb77614a0f.png](https://i-blog.csdnimg.cn/blog_migrate/ea431088fa0f9cb4f51fb636ba95b82e.jpeg)
用R绘制地图比较简单。比如画一下全国范围的区域,可以用如下代码:
library(maptools)
mydat = readShapePoly("china-province-border-data.tar/china/bou2_4p.shp") #地图包位置,根据自己的角标位置设置
plot(mydat)
生成的图如下:
![459bc3779fb2ad541156b7168438e520.png](https://i-blog.csdnimg.cn/blog_migrate/87662b73f97b241ab89130c7ba0d2a6e.jpeg)
但是,可以看出这样绘制的地图的形状有些扁平。这是因为,在绘图的过程中,默认把经度和纬度作为普通数据,均匀平等对待,绘制在笛卡尔坐标系上造成的。其实,地球的球面图形如何映射到平面图上,在地理学上是有一系列不同的专业算法的。地图不应该画在普通的笛卡尔坐标系上,而是要画在地理学专业的坐标系上。
也可以安装maps和mapdata这两个包,然后输入下面的命令:
install.packages(mapdata)
install.packages("mapdata")
library(maps)
library(mapdata)
map("china")
生成的图如下:
![25d093c8583797f429022df7bd7c07c9.png](https://i-blog.csdnimg.cn/blog_migrate/4f13bc72b198be0d8150ec7d402b4702.jpeg)
其中map()函数还可以加上很多参数,大致如下:
map(database = "world