使用mplleaflet.display()报错:AttributeError: 'XAxis' object has no attribute '_gridOnMajor'
解决mplleaflet与Matplotlib版本兼容导致的AttributeError问题
错误原因
这个AttributeError: 'XAxis' object has no attribute '_gridOnMajor'错误,是因为你当前使用的Matplotlib版本过高,mplleaflet库的代码还在依赖Matplotlib已移除的内部属性_gridOnMajor,两者版本不兼容导致的。
解决方案
方案1:降级Matplotlib到兼容版本
执行以下命令安装与mplleaflet兼容的Matplotlib版本:
pip install matplotlib==3.3.4
重新运行你的代码即可正常生成交互式地理散点地图。
方案2:修改mplleaflet源码适配新版本Matplotlib
如果不想降级Matplotlib,可以手动修改mplleaflet的核心文件:
- 找到mplleaflet的安装目录(一般在Python环境的
Lib\site-packages\mplleaflet下) - 打开
leaflet.py文件,找到所有调用ax.xaxis._gridOnMajor或ax.yaxis._gridOnMajor的代码行 - 将这些代码替换为Matplotlib新版本的对应判断方式:
- 把
ax.xaxis._gridOnMajor替换为ax.xaxis._major_tick_kw.get('gridOn', False) - 把
ax.yaxis._gridOnMajor替换为ax.yaxis._major_tick_kw.get('gridOn', False)
保存文件后重新运行代码即可。
- 把
关于移除mplleaflet.display()后图表不符的说明
直接调用plt.scatter生成的是普通笛卡尔坐标系的散点图,没有将经纬度数据映射到地理地图的坐标系上。而mplleaflet.display()的作用是把Matplotlib的图表转换成基于Leaflet的交互式地理地图,所以移除后自然看不到预期的地理散点效果。
内容的提问来源于stack exchange,提问作者dishum
相关产品推荐
相关产品推荐

