Jupyter Notebook中使用mplleaflet:notebook模式下如何消除空白?
解决mplleaflet在%matplotlib notebook模式下的空白问题
这个问题确实挺恼人的——我之前也被这个交互式绘图模式和mplleaflet的冲突折腾过几次,总结了几个实用的解决办法:
方法1:关闭当前Notebook绘图轴再显示地图
%matplotlib notebook会创建一个交互式的绘图轴,这个轴会和mplleaflet生成的地图叠加产生空白。你可以在调用mplleaflet.display()之前关闭当前的轴,这样就能避免多余的画布占位:
import matplotlib.pyplot as plt import mplleaflet # 你的绘图代码,比如: plt.plot([1,2,3], [4,5,6]) # 先关闭当前的notebook轴 plt.close() # 再显示地图 mplleaflet.display()
方法2:设置极小尺寸的画布
既然空白来自notebook模式下的matplotlib画布,你可以直接把画布尺寸设得极小,让它几乎看不见:
import matplotlib.pyplot as plt import mplleaflet # 创建一个极小尺寸的画布 fig, ax = plt.subplots(figsize=(0.1, 0.1)) # 你的绘图代码,比如: ax.plot([1,2,3], [4,5,6]) # 显示地图 mplleaflet.display(fig=fig)
这样生成的空白区域会被压缩到几乎可以忽略的程度。
方法3:临时切换到inline模式处理地图
如果你的Notebook里既有交互式绘图需求,又需要用mplleaflet,可以在绘制地图的单元格单独切换到%matplotlib inline,用完再切回notebook模式:
# 地图单元格 %matplotlib inline import matplotlib.pyplot as plt import mplleaflet plt.plot([1,2,3], [4,5,6]) mplleaflet.display()
然后在后续需要交互式绘图的单元格里再切换回来:
%matplotlib notebook # 继续你的交互式绘图代码 plt.plot([1,3,2], [6,4,5]) plt.show()
为什么会出现空白?
本质原因是%matplotlib notebook会在单元格中插入一个交互式的Jupyter Widget画布,而mplleaflet是把matplotlib图形转换成Leaflet地图嵌入到单元格里——这两个画布同时存在就会产生多余的空白区域,我们的解决思路就是避免这两个画布同时显示。
内容的提问来源于stack exchange,提问作者ollerend
相关产品推荐
相关产品推荐

