在 NetworkX 中绘制图形

Posted

技术标签:

【中文标题】在 NetworkX 中绘制图形【英文标题】:Draw graph in NetworkX 【发布时间】:2013-10-13 07:50:01 【问题描述】:

我正在尝试在 NetworkX 中绘制任何图形,但什么也没得到,甚至没有错误:

import networkx as nx
import matplotlib.pyplot as plt
g1=nx.petersen_graph()
nx.draw(g1)

【问题讨论】:

还要确保您使用的是交互式后端。 matplotlib.get_backend() 返回什么? 【参考方案1】:

添加到末尾:

plt.show()

import networkx as nx
import matplotlib.pyplot as plt
g1 = nx.petersen_graph()
nx.draw(g1)
plt.show()

从调用了plt.ion() 的交互式shell 运行时,不需要plt.show()。这可能就是为什么它在很多例子中被省略的原因。

如果您从脚本运行这些命令(其中plt.ion() 尚未被调用),则需要plt.show()plt.ion() 可以用于交互式会话,但 not recommended for scripts。

【讨论】:

show() 有帮助。谢谢你。我最终在没有 show() 的情况下保存了数字。【参考方案2】:

在 ipython notebook 中,只需输入 magic

%matplotlib inline

%matplotlib notebook

【讨论】:

【参考方案3】:

您可以使用 jupyter notebook 轻松绘制 networkx 图表。见第一个例子。

或者,您可以使用Bokeh 绘制图形,这增加了有用的功能。 holoviews 包使绘制散景图变得更加简单。它在悬停在节点上时添加了自动突出显示和显示标签等功能。但是,编辑颜色等似乎是一个问题。

%pylab inline  
# `pylab notebook`  # for interactive plots

import pandas as pd
import networkx as nx
import holoviews as hv

G=nx.Graph()
ndxs = [1,2,3,4]
G.add_nodes_from(ndxs)
G.add_weighted_edges_from( [(1,2,0), (1,3,1) , (1,4,-1) , (2,4,1) , (2,3,-1), (3,4,10) ] ) 
nx.draw(G, nx.spring_layout(G, random_state=100))

这里是散景和全息视图的例子:

hv.extension('bokeh')
%opts Graph [width=400 height=400]
padding = dict(x=(-1.1, 1.1), y=(-1.1, 1.1))
hv.Graph.from_networkx(G, nx.layout.spring_layout).redim.range(**padding)

你应该试一试,把它画在你的笔记本上看看有什么不同。

【讨论】:

【参考方案4】:

通过添加它可以正常工作:

import matplotlib.pyplot as plt
plt.show()

到您的代码。我的工作正常。

【讨论】:

以上是关于在 NetworkX 中绘制图形的主要内容,如果未能解决你的问题,请参考以下文章

从 networkx 绘制以底图位置为中心的图形

Plotly Dash:在 Python 中绘制 networkx

子图中的 networkx 正在绘制部分在轴框架之外的节点

Networkx:如何在图形中显示节点和边属性

使用 nx.draw_graphviz 在 python 中的 graphviz 布局中绘制图形给出错误

绘制动画网络图的工具是什么