JupyterLab如何显示外部文件创建的matplotlib可交互图表
JupyterLab导入外部文件matplotlib图表无法内联渲染问题
需求背景
我希望实现一个支持点击交互的地图,点击地图任意位置后,即可绘制对应点位的SkewT(斜温图)与Hodograph(风矢端图),展示该点位的气象信息。我基于metpy库编写了SoundingGraphs类封装相关绘图逻辑,可成功生成目标图表:
已成功绘制的SkewT与Hodograph
遇到的问题
将绘图代码存放在独立外部文件、仅导入SoundingGraphs类到JupyterLab使用时,图表始终无法在笔记本单元格内渲染,仅会在日志中以警告、信息级别的条目输出,原因不明:
日志中输出的图表信息
已尝试的无效方案
- 在外部文件内调用
plt.show() - 返回plt对象后在notebook单元格内调用
plt.show() - 切换
%matplotlib widget/%matplotlib notebook/%matplotlib inline等matplotlib后端 - 更换JupyterLab版本
临时替代方案(不满足需求)
目前可通过将图表输出为字节流、加载静态图片的方式实现显示,但该方案无法支持后续悬停显示数值等交互需求,不符合预期。
类中字节流输出代码:
buffer = BytesIO() plt.savefig(buffer, format='png') return buffer
Notebook中加载静态图的代码:
image = Image() display(image) def on_generate_button_clicked(b): buffer = SoundingGraphs(infos) buffer.seek(0) image.value=buffer.read() image.format='png' generate_button.on_click(on_generate_button_clicked)
诉求
寻找可行方法,能够在JupyterLab单元格内正常显示外部文件中通过plt.show()生成的可交互图表。
运行环境版本
Python 3.6.9 jupyterlab==3.2.9 jupyterlab-pygments==0.1.2 jupyterlab-server==2.10.3 jupyterlab-widgets==1.1.0 ipykernel==5.5.6 ipyleaflet==0.14.0 ipympl==0.8.8 ipython==7.16.3 ipython-genutils==0.2.0 ipywidgets==7.7.0 matplotlib==3.3.4
内容的提问来源于stack exchange,提问作者PhilippeTh
相关产品推荐
相关产品推荐

