Пользовательские метки легенды - геопандас.плот - PullRequest
0 голосов
/ 20 мая 2018

Мы с коллегой пытались установить пользовательские метки легенды, но пока не смогли.Код и подробности ниже - любые идеи приветствуются!

Записная книжка: пример игрушки, загруженный сюда

Цель: изменить значения коэффициента по умолчанию, используемые в легенде, на соответствующие процентные значения

Проблема: невозможно выяснить, как получить доступ к объекту легенды или передать legend_kwds в geopandas.GeoDataFrame.plot()

Данные: Районы метрополитена KCMO

Выдержки из примера с игрушкой

Шаг 1: чтение данных

# imports
import geopandas as gpd
import matplotlib.pyplot as plt
%matplotlib inline
# read data
gdf = gpd.read_file('kcmo_counties.geojson')

Вариант 1 - получить легенду из ax, как предложено здесь :

ax = gdf.plot('val', legend=True)
leg = ax.get_legend()
print('legend object type: ' + str(type(leg))) # <class NoneType>
plt.show()

Вариант 2: передать legend_kwds словарь - я предполагаю, что я делаю что-то здесь не так (и явно не до конца понимаю основные детали), но _doc_ из plotting.py Геопанды. - для которого GeoDataFrame.plot () является просто оболочкой - похоже, не проходит ...

# create number of tick marks in legend and set location to display them
import numpy as np
numpoints = 5
leg_ticks = np.linspace(-1,1,numpoints)

# create labels based on number of tickmarks
leg_min = gdf['val'].min()
leg_max = gdf['val'].max()
leg_tick_labels = [str(round(x*100,1))+'%' for x in np.linspace(leg_min,leg_max,numpoints)]
leg_kwds_dict = {'numpoints': numpoints, 'labels': leg_tick_labels}

# error "Unknown property legend_kwds" when attempting it:
f, ax = plt.subplots(1, figsize=(6,6))
gdf.plot('val', legend=True, ax=ax, legend_kwds=leg_kwds_dict)

ОБНОВЛЕНИЕ Просто наткнулся этот разговор о добавлении в legend_kwds - и эта другая ошибка? , которая ясно заявляет legend_kwds не было в последней версии GeoPandas (v0.3.0).Предположительно, это означает, что нам нужно будет скомпилировать из источника GitHub master, а не устанавливать с помощью pip / conda ...

1 Ответ

0 голосов
/ 02 июля 2018

Я только что столкнулся с этой проблемой сам.После перехода по ссылке на исходный код Geopandas кажется, что цветовая полоса добавлена ​​в качестве второй оси к фигуре.поэтому вы должны сделать что-то вроде этого, чтобы получить доступ к меткам цветного столбца (при условии, что вы нанесли хлороплет с legend=True):

# Get colourbar from second axis
colourbar = ax.get_figure().get_axes()[1]

Сделав это, вы можете манипулировать метками следующим образом:

# Get numerical values of yticks, assuming a linear range between vmin and vmax:
yticks = np.interp(colourbar.get_yticks(), [0,1], [vmin, vmax])

# Apply some function f to each tick, where f can be your percentage conversion
colourbar.set_yticklabels(['{0:.2f}%'.format(ytick*100) for ytick in yticks])
...