程序员如何庆祝十一:用Python绘制红色的中国地图
文章目录
- 安装Basemap
- 中国地理地图
- 红色的中国地图
安装Basemap
basemap
相当于是matplotlib
的扩展,而且作为一款地图绘制工具各种地理坐标的转换是其必不可少的功能,故而需要安装pyproj
,在去年以前,Basemap
还没有进入pip
的时候,还得手动安装各种依赖,并且下载whl
在本地安装,过程十分痛苦。
但今天发现可以用pip
和conda
进行安装了,可谓喜大普奔。但需要注意,除了安装基础库之外,还需安装数据包。
conda install basemap
conda install conda install -c conda-forge basemap-data-hires
装完之后,进入python,先搞个地球再说
import matplotlib.pyplot as plt
import mpl_toolkits.basemap as bm #以下都默认bm
from mpl_toolkits.basemap import Basemap
m = Basemap(projection='ortho',lat_0=30, lon_0=100)
m.bluemarble()
plt.show()
得到
其中,projection
为投影方式,ortho
表示正交投影;lat_0
表示中心维度;lon_0
表示中心经度。
bluemarble
是一种绘图时的渲染方法,可以理解为极致色彩。
中国地理地图
中国最东端在黑龙江和乌苏里江的主航道中心线的相交处(135.05E),最西端在帕米尔高原附近(73.49E),最南端在立地暗沙(3.516N),最北端在漠河以北黑龙江主航道的中心线上(53.56N),有了这些经纬度信息,就可以绘制出中国地图了
cm = bm.Basemap(llcrnrlon=73,llcrnrlat=3,urcrnrlon=136,urcrnrlat=54)
cm.bluemarble()
plt.show()
就可以看到这个熟悉的轮廓
其输入参数表示起始经纬度,由于参数的名字太过吊诡,所以有必要说明一下记忆方法。ll
即lower left;ur
即upper right;crnr
即corner。然后lon
表示经度;lat
表示维度。
综合来看,llcrnrlon
为低经度;llcrnrlat
为低纬度;urcrnrlon
为高经度;urcrnrlat
为高纬度。
红色的中国地图
若想绘制更加精细的中国地图,就需要用到额外的数据包了,戳这里:中国地图的shp包,含九段线。
下载后解压,然后就可以通过readshapefile
调用了,其绘图代码如下
# 画中国地图
cm = bm.Basemap(llcrnrlon=73,llcrnrlat=3,urcrnrlon=136,urcrnrlat=54)
cm.readshapefile('cn/九段线', 'china', drawbounds=True)
cm.readshapefile('cn/省', 'china', drawbounds=True)
# 给 seg 地区 画 k 颜色
ax = plt.gca()
ax.axis('off')
for seg in cm.china:
poly = plt.Polygon(seg, facecolor='r')
ax.add_patch(poly)
plt.show()
效果如下
其中,readshapefile
用于读取shp
文件,drawbounds
设为True,表示绘制边界plt.Polygon
用于绘制图形。其绘图逻辑为,逐个添加各省份的形状,然后将这些形状染为红色。