我一直在使用 OSMNX 从 Open Street Maps 中提取公园的形状。我试图将它们显示为标准的 pyplot 子图,但我不能让它直接工作。
假设这是我的一系列地点:
places =
{'Hyde Park' : 'Hyde Park, London, UK',
'Kensington Gardens' : 'Kensington Gardens, London, UK',
'Regents Park' : 'Regents Park, London, UK',
'Hampstead Heath' : 'Hampstead Heath, London, UK',
'Alexandra Park' : 'Alexandra Park, London, UK',
'Clissold Park' : 'Clissold Park, London, UK',
'Finsbury Park' : 'Finsbury Park, N4 2NQ, London, UK',
'Russell Square' : 'Russell Square, London, UK'
}
以下正确显示堆叠的形状:
for place in sorted(places.keys()):
query = places[place]
print(query)
G = ox.gdf_from_place(query)
fig, ax = ox.plot_shape(G)
我不是 pyplot/OSMNX 的资深专家,但我的理解是,为了将形状图传递给子图,我需要以某种方式“提取轴”。
但是,我知道如何获取形状,将其转换为 shapefile,并将其显示在子图中:
import shapefile
n = len(places)
ncols = int(np.ceil(np.sqrt(n)))
nrows = int(np.ceil(n / ncols))
figsize = (ncols * 3, nrows * 3)
fig, axes = plt.subplots(nrows, ncols, figsize=figsize, subplot_kw, {'projection':None})
axes = [item for sublist in axes for item in sublist]
for ax, place in zip(axes, sorted(places.keys())):
query = places[place]
G = ox.gdf_from_place(query)
ox.save_gdf_shapefile(G, folder='shp', filename=place)
shp = shapefile.Reader("shp/"+place+"/"+place+".shp")
for shape in shp.shapeRecords():
x = [i[0] for i in shape.shape.points[:]]
y = [i[1] for i in shape.shape.points[:]]
ax.plot(x,y)
是否可以直接使用 plot_shape() 生成相同的图表?