[英]Custom legend labels - geopandas.plot()
我和一位同事一直在尝试设置自定义图例标签,但到目前为止都失败了。 下面的代码和详细信息 - 非常感谢任何想法!
笔记本: 此处上传的玩具示例
目标:将图例中使用的默认速率值更改为相应的百分比值
问题:无法弄清楚如何访问图例对象或将legend_kwds
传递给geopandas.GeoDataFrame.plot()
数据: KCMO 都市区县
摘自玩具示例
第一步:读取数据
# 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
字典 - 我假设我在这里做错了(并且显然没有完全理解底层细节),但是来自Geopandas 的 plotting.py 的 _doc_ _doc_
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 安装...
我自己碰到过这个问题。 在链接到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])
这可以通过将键值对传递给字典参数legend_kwds
来完成:
gdf.plot(column='col1', cmap='Blues', alpha=0.5, legend=True, legend_kwds={'label': 'FOO', 'shrink': 0.5}, ax=ax)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.