Osmnx: как заставить plot_shape () работать в субплотах pyplot? - PullRequest
0 голосов
/ 28 сентября 2018

Я использую 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, но я понимаю, что для того, чтобы передать граф фигур в подзаговор, мне нужно как-то "извлечьоси».

Однако я знаю, как взять фигуру, преобразовать ее в шейп-файл и отобразить ее в подзаговоре:

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 () напрямую?

1 Ответ

0 голосов
/ 28 сентября 2018

Несколько вариантов, в зависимости от вашей конечной цели:

import osmnx as ox
import matplotlib.pyplot as plt
import geopandas
ox.config(use_cache=True, log_console=True)

# option 1: display all neighborhoods in a single figure/axis
places = ['Hyde Park, London, UK',
          'Kensington Gardens, London, UK',
          'Regents Park, London, UK',
          'Hampstead Heath, London, UK',
          'Alexandra Park, London, UK',
          'Clissold Park, London, UK',
          'Finsbury Park, N4 2NQ, London, UK',
          'Russell Square, London, UK']
gdf = ox.gdf_from_places(places)
fig, ax = ox.plot_shape(gdf)

# option 2: display each neighborhood in its own axis in a single figure
fig, axes = plt.subplots(nrows=2, ncols=4)
axes = axes.flat
for ax, i in zip(axes, gdf.index):
    gdf.loc[i:i]['geometry'].plot(ax=ax)
    ax.axis('off')
plt.show()
...