networkx和matplotlib之间的交互

时间:2013-09-01 23:01:08

标签: python graph matplotlib networkx

我在matplotlib中尝试网络和可视化,我很困惑,因为我不清楚他们如何互相交流? 有简单的例子

import matplotlib.pyplot
import networkx as nx
G=nx.path_graph(8)
nx.draw(G)
matplotlib.pyplot.show()

我在哪里告诉pyplot,我想绘制图G? 我猜nx.draw使用像matplotlib.pyplot这样的东西。{plot等...} 所以,如果我想绘制2个图表:

import matplotlib.pyplot
import networkx as nx

G=nx.path_graph(8)
E=nx.path_graph(30)
nx.draw(G)

matplotlib.pyplot.figure()
nx.draw(E)
matplotlib.pyplot.show()

然后......小实验

import networkx as nx
G=nx.path_graph(8)
E=nx.path_graph(30)
nx.draw(G)
import matplotlib.pyplot
matplotlib.pyplot.figure()
nx.draw(E)
import matplotlib.pyplot as plt
plt.show()

请不要因为这个愚蠢的代码而杀了我,我只是想了解 - networkx如何绘制matplotlib的东西,而它甚至还没有导入!

P.S:对不起我的英文。

1 个答案:

答案 0 :(得分:15)

如果要单独绘制图形或创建单个Axes对象并将其传递给nx.draw,只需创建两个不同的轴。例如:

G = nx.path_graph(8)
E = nx.path_graph(30)

# one plot, both graphs
fig, ax = subplots()
nx.draw(G, ax=ax)
nx.draw(E, ax=ax)

得到:

enter image description here

如果你想要两个不同的图形对象,那么就单独创建它们,如下所示:

G = nx.path_graph(8)
E = nx.path_graph(30)

# two separate graphs
fig1 = figure()
ax1 = fig1.add_subplot(111)
nx.draw(G, ax=ax1)

fig2 = figure()
ax2 = fig2.add_subplot(111)
nx.draw(G, ax=ax2)

得到以下特性:

enter image description here enter image description here

最后,您可以根据需要创建一个子图,如下所示:

G = nx.path_graph(8)
E = nx.path_graph(30)

pos=nx.spring_layout(E,iterations=100)

subplot(121)
nx.draw(E, pos)

subplot(122)
nx.draw(G, pos)

导致:

enter image description here

如果你想在ax之外创建子图,那么nx.draw的{​​{1}}参数对matplotlib的API 来说是无用的,因为pylabnx.draw进行了一些调用,这使得它依赖于gca接口。没有真正深入研究为什么会这样,只是想我会指出它。

pylab的源代码非常简单:

nx.draw
  1. 使用try: import matplotlib.pylab as pylab except ImportError: raise ImportError("Matplotlib required for draw()") except RuntimeError: print("Matplotlib unable to open display") raise cf=pylab.gcf() cf.set_facecolor('w') if ax is None: if cf._axstack() is None: ax=cf.add_axes((0,0,1,1)) else: ax=cf.gca() # allow callers to override the hold state by passing hold=True|False b = pylab.ishold() h = kwds.pop('hold', None) if h is not None: pylab.hold(h) try: draw_networkx(G,pos=pos,ax=ax,**kwds) ax.set_axis_off() pylab.draw_if_interactive() except: pylab.hold(b) raise pylab.hold(b) return 从环境中捕获图。
  2. 如果一个gcf对象不存在,则将其添加到该图中,否则使用Axes从环境中获取该对象。
  3. 使情节面部颜色为白色
  4. 转到gca
  5. 使用内部函数绘制
  6. 关闭轴
  7. 最后,如果我们处于交互模式,请绘制并重新捕获所有被捕获的异常