Аннотирующие xy точки в матплотибе и геопандах - PullRequest
2 голосов
/ 01 марта 2020

Я пытаюсь комментировать некоторые точки на карте, используя Geo pandas, но мой вопрос больше связан с matplotlib.

Я создал столбец координатных точек для моего xy, но получаю следующее предупреждение, когда пробуя ряд подходов.

ValueError: ('not enough values to unpack (expected 2, got 1)', 'occurred at index 0')

enter image description here

Текст, который я хочу аннотировать, представляет собой идентификационные номера (pod_id_location), я просто хочу нанести эти числа рядом с (или на) их соответствующие точки, просто чтобы я мог видеть, какие идентификаторы соответствуют какой точке при построении на карте. Я пытаюсь использовать lambda apply для отображения этих значений из одного столбца в координаты другого столбца. Я не вижу, где я иду не так, и получаю ту же ошибку, используя для l oop. Спасибо за любые указатели, мои данные и код ниже:

    pod_id_location geometry    Zone
0   1245    POINT (-22993.152 6728924.970)  non-ULEZ
7940    2245    POINT (-13406.652 6714132.654)  ULEZ
13934   3245    POINT (-16958.244 6720147.066)  non-ULEZ
25068   5245    POINT (-20791.698 6699568.057)  non-ULEZ
32551   6245    POINT (-40049.413 6704610.464)  non-ULEZ
... ... ... ...
849223  742451  POINT (-12923.302 6720129.538)  non-ULEZ
849547  832450  POINT (-6445.287 6717978.299)   non-ULEZ
851190  872450  POINT (-4064.943 6697346.893)   non-ULEZ
852852  892450  POINT (6744.514 6713063.033)    non-ULEZ
853523  982450  POINT (-958.349 6706975.535)    non-ULEZ
ax = gdf_2[gdf_2['Zone'] == 'ULEZ'].plot(figsize=(10, 8))

gdf_2.apply(lambda x: ax.annotate(s=x.pod_id_location, xy=x.geometry), axis=1)

plt.axis('off')
plt.show()

1 Ответ

1 голос
/ 01 марта 2020

Мне удалось решить проблему, изменив мою лямбда-функцию на это:

gdf_2.apply(lambda x: ax.annotate(s=x.pod_id_location, xy=x.loc['geometry'].coords[0]), axis=1)

Поскольку первый элемент объекта шейпли - это координаты. По какой-то причине мой сюжет теперь печатается крошечным ... но это что-то для меня, чтобы решить ...

...