用python画中国地图
程序员文章站
2022-06-08 13:01:28
...
安装Basemap
先安装相应的组件。我假定你已经都安装好了Python
以及Jupyter
等等。如果没有安装的话,就去尝试一下brew install python3
和brew install jupyter
吧,网上有很多教程。
然后你需要用pip3 install
很多我们下面可能需要用到的库。但是因为我们要用一个叫做Basemap
的库,而这个库没有办法用简单的pip3 install
安装,所以稍多两个步骤:
brew install geos
pip3 install https://github.com/matplotlib/basemap/archive/v1.1.0.tar.gz
开始画图
启动Jupyter
之后,我们还是本着从最简单的代码开始。先画一个世界地图:import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
plt.figure(figsize=(16,8))
m = Basemap()
m.drawcoastlines()
plt.show()
前面两行引入相应的库,真正的代码就4行,够简单吧。第1行甚至可以不写,它定义了图的大小。第2行我们创建一个地图,第3行把海岸线画上,第4行显示这个地图,就是这样:
然后我们开始画上国家,又是1行代码:
m.drawcountries(linewidth=1.5)
就变成了这样:
如果我们想显示中国地图,只需要在创建Basemap
时指定一下经纬度就行了:
m = Basemap(llcrnrlon=73, llcrnrlat=18, urcrnrlon=135, urcrnrlat=53)
然后就得到了中国地图:看上去有点变形,这是因为我们没有添加任何投影的原因,Basemap
提供24
种不同的投影方式,你可以自己一个个试一下,比较常用的是兰勃特投影
,我们添加一下:
m = Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
这次终于看上去比较正常了:我们想加上省的边界怎么办呢?Basemap
缺省的包里没有中国的省区,只有美国的州,毕竟是美国人做的嘛。不过好在世界很大,有专门的国际组织干这事,在https://gadm.org/download_country_v3.html 你可以下载全世界任何一个国家的行政区划Shape
文件,然后我们给它加上:
m.readshapefile('CHN_adm_shp/CHN_adm1', 'states', drawbounds=True)
然后就得到了下图:
再往后,你还可以往图上改颜色啦,写数字啦,这些就留待你研究吧
上一篇: 怎么消除网站无效页面的负面影响