本文主要想在目前网络文献中为大家抽去除一些比较个人的经验的问题。其中包括,
本人主要抱着抛砖引玉的心态,为网友准备的一个入门级表的实操,还请各位大佬见谅。
在这里为大家准备是的才windows平台上如何安装Basemap,对于Linux操作系统本人并未做尝试,但是应该都差不多,首先要讲一点就是Basemap在Anaconda 和pip的仓库中都没有,所以需要自己去下载对应的whl文件:
安装可以采用pip 和anaconda命令进行安装
pip install pyproj‑1.9.6‑cp37‑cp37m‑win_amd64.whl
pip install basemap‑1.2.0‑cp37‑cp37m‑win_amd64.whl
conda install pyproj‑1.9.6‑cp37‑cp37m‑win_amd64.whl
conda install basemap‑1.2.0‑cp37‑cp37m‑win_amd64.whl
两者令名差不多,其实看自己本机环境安装就好了,这里我没碰到什么坑,基本安装都很正常,为了保险,我先安装了pyproj 之后再安装的 basemap。
这里个人水平有限不太懂地图的投影之类的知识,还有basemap提供的项目内容,我就直接粘贴代码:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
# plt.figure(figsize=(16, 8))
m= Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
# m= Basemap(llcrnrlon=73, llcrnrlat=18, urcrnrlon=135, urcrnrlat=53)
m.drawcountries(linewidth=1.5)
m.drawcoastlines()
plt.show()
了解地图的网友应该知道这地图的行政区域上藏南地区是有一些问题的。所以这图在很多地方其实是不太好使用的。
有很多网友在网上提供的下载中国区域的shapfile文件地址是:https://gadm.org/download_country_v3.html 这个网站确实能下载到比较多的地图,但是这上面的地图和Basemap默认提供的地图一样存在国界线的问题。
所以我在github上找到一个好的中国国界线shapefile,内容比较少,但是基本边界是没有我能提的,下载地址为:https://github.com/dongli/china-shapefiles
m3= Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
m3.readshapefile("china-shapefiles-master/china", 'china', drawbounds=True)
plt.show()
由于我们直接使用shapefile来绘制了,所以就没有再使用basemap的绘制海岸线 和国界线等API了,一面看起来比较混杂。
这里我就使用了简单的上色方案,让matplotlib是调色板自动加色,所以效果没那么好,这毕竟不是我想做的重点如果对这部分有兴趣的同学可以参考用Matplotlib配合Basemap画一个中国地图 使用中国省份人口数据来上色的,效果好一些。
from matplotlib.patches import Polygon
from matplotlib.colors import rgb2hex
m5= Basemap(llcrnrlon=80, llcrnrlat=0, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
m5.readshapefile("china-shapefiles-master/china", 'china', drawbounds=True)
m5.readshapefile("china-shapefiles-master/china_nine_dotted_line", 'nine_dotted', drawbounds=True)
cmap = plt.cm.YlOrRd
ax =plt.gca()
for nshape, seg in enumerate(m5.china):
color = rgb2hex(cmap(nshape)[:3])
poly = Polygon(seg, facecolor=color, edgecolor=color)
ax.add_patch(poly)
plt.show()
provinces = set()
for shapedict in m5.china_info:
statename = shapedict['OWNER']
provinces.add(statename.replace("\x00",""))
print(provinces )
{'上海市',
'云南省',
'内蒙古自治区',
'北京市',
'台湾省',
'吉林省',
'四川省',
'天津市',
'宁夏回族自治区',
'安徽省',
'山东省',
'山西省',
'广东省',
'广西壮族自治区',
'新疆维吾尔自治区',
'江苏省',
'江西省',
'河北省',
'河南省',
'浙江省',
'海南省',
'湖北省',
'湖南省',
'澳门特别行政区',
'甘肃省',
'福建省',
'西藏自治区',
'贵州省',
'辽宁省',
'重庆市',
'陕西省',
'青海省',
'香港特别行政区',
'黑龙江省'}
stations_lon_lat = pd.read_csv("lon_lat_mean.csv")
plt.rcParams['figure.figsize'] = (30.0, 18.0)
m7= Basemap(llcrnrlon=80, llcrnrlat=0, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100)
m7.readshapefile("china-shapefiles-master/china", 'china', drawbounds=True)
m7.readshapefile("china-shapefiles-master/china_nine_dotted_line", 'nine_dotted', drawbounds=True)
longitudes, latitudes = m7(stations_lon_lat["Longitude"].get_values(), stations_lon_lat["Latitude"].get_values())
m7.scatter(longitudes, latitudes, s=10, marker='*',facecolors='r',edgecolors='r')
[1]: 【译】Basemap手册 https://www.sohu.com/a/237965467_165070
[2]: Anaconda中 安装basemap包 https://blog.csdn.net/pengranxindong/article/details/79136486
[3]: Basemap画一个中国地图 https://blog.csdn.net/u011596455/article/details/79620676