如何无需显式调用matplotlib在Jupyter中使用NetworkX绘图
NetworkX在Jupyter Notebook中不显示图形的解决方案
问题原因说明
你遇到的无报错但不出图的问题本质是Jupyter Notebook的matplotlib后端渲染配置变更导致的:
- 旧环境默认开启了matplotlib inline渲染模式,绘图命令执行后会自动输出图像,无需额外调用展示语句
- 后续可能因为更新Jupyter、matplotlib、NetworkX版本,或是切换了虚拟环境,默认关闭了自动渲染配置,因此需要手动触发展示逻辑
无需显式调用matplotlib的实现方案
- 方案1:单次Notebook临时生效
在Notebook首个代码块运行Jupyter内置魔术命令%matplotlib inline,运行一次后整个Notebook生命周期内所有nx.draw/nx.draw_networkx命令执行后都会自动输出图像,不需要导入matplotlib也无需调用plt.show()。如果需要可交互的缩放、拖拽功能,可以替换为%matplotlib notebook。 - 方案2:全局永久生效
打开终端执行命令jupyter notebook --generate-config生成Jupyter配置文件,打开生成的jupyter_notebook_config.py文件,找到# c.InteractiveShellApp.matplotlib = ''行,修改为c.InteractiveShellApp.matplotlib = 'inline'后保存,之后所有新建的Notebook都会默认开启自动渲染,无需添加任何额外代码即可直接展示NetworkX绘图结果。 - 方案3:封装调用隐藏matplotlib逻辑
如果你是做对外演示的工作表,不想在代码中出现任何matplotlib相关语句,可以将绘图逻辑封装为自定义函数:
后续所有绘图仅需调用def nx_draw_auto(g, **kwargs): nx.draw_networkx(g, **kwargs) __import__('matplotlib.pyplot').pyplot.show()nx_draw_auto(G2, with_labels=True, node_color = 'y')即可,对外展示的代码中不会出现显式的matplotlib导入和调用语句。
内容的提问来源于stack exchange,提问作者Louise Cullen
相关产品推荐
相关产品推荐

