Python使用vba_choropleth绘制分级统计图时图例与地图颜色不匹配
vba_choropleth图例与地图颜色不匹配解决方案
问题原因
该问题通常由两个原因导致:
- 传入的
alpha_mapclassify和rgb_mapclassify字典参数在内部实例化分类器时,图例生成环节没有复用绘图环节的分类边界,出现边界偏移 - 旧版本
pysal/mapclassify库存在值透明度分级统计图的图例同步逻辑已知bug
解决方案
方案1:手动预实例化分类器(优先推荐)
提前创建分类器实例再传入绘图函数,保证绘图和图例生成使用完全一致的分类边界,修改后代码如下:
import mapclassify import matplotlib.pyplot as plt # 预实例化两个分类器,固定分类边界 alpha_clf = mapclassify.Quantiles(x, k=5) rgb_clf = mapclassify.Quantiles(y, k=5) fig = plt.figure(figsize=(15,10)) ax = fig.add_subplot(111) vba_choropleth( x, y, gdf, alpha_mapclassify=alpha_clf, rgb_mapclassify=rgb_clf, legend=True, ax=ax )
方案2:关闭自动图例,手动构造图例
如果方案1仍不生效,直接关闭自动图例,手动构造完全匹配的图例项:
from matplotlib.patches import Patch fig = plt.figure(figsize=(15,10)) ax = fig.add_subplot(111) # 关闭自动图例 vba_choropleth( x, y, gdf, alpha_mapclassify=dict(classifier='quantiles', k=5), rgb_mapclassify=dict(classifier='quantiles', k=5), legend=False, ax=ax ) # 手动构造图例,根据你的颜色和透明度分级自定义每个Patch legend_elements = [ Patch(facecolor='#对应颜色1', alpha=0.2, label='分级1'), Patch(facecolor='#对应颜色2', alpha=0.4, label='分级2'), # 补充所有需要的图例项 ] ax.legend(handles=legend_elements, loc='lower right')
方案3:升级依赖库
升级到最新版本的依赖库,修复已知bug:
pip install --upgrade pysal mapclassify matplotlib
问题现象参考

内容的提问来源于stack exchange,提问作者Sunflower
相关产品推荐
相关产品推荐

