接上篇python开发:空气质量历史数据分析(二),这里插一个基础的地图分析类库,因为前边做的数据,这些监测站在地图上有位置信息,可以将此类的分析信息展示在地图上,结合位置进行查看。
python中最常用的类库可以使用mpl_toolkits.basemap中的Basemap,数据是北京的空气质量历史数据,要使用现有的矢量数据,在地图上画一个北京政区图。
矢量数据用shp或者geojson格式都可以,为了减少数据文件数量,转了一个geojson数据,通过fiona进行数据读取,引用fiona的类库,读取geojson数据。
import fiona
shpdata = fiona.open(path, 'r')
引用Basemap的类库,循环遍历geojson的数据,在地图上进行数据的绘制,数据根据其中的情况,获得坐标信息,使用plot函数进行地图的绘制线操作,设置线的颜色和宽度等属性,使用的数据是polygon类型,要把其中的每条线都遍历画出来。
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap as Basemap
fig, ax = plt.subplots()
m = Basemap(epsg=4326, resolution='l', llcrnrlat=bounds[1], urcrnrlat=bounds[3],
llcrnrlon=bounds[0], urcrnrlon=bounds[2])
while True:
try:
evdata = shpdata.next()
evshape = evdata['geometry']['coordinates']
for evls in evshape:
xx, yy = zip(*evls)
m.plot(xx, yy, linewidth=1, color='black')
有时需要在地图上画注记信息,就需要使用shapely计算一下区域的中心点,在地图上画注记。
from shapely.geometry import shape, point
ax.annotate(evdata['properties']['NAME99'],
(X, Y), xytext=(-10, 5), textcoords='offset points')
效果图: