如果要分别绘制图形或创建单个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)
要得到:
如果您想要两个不同的图形对象,请分别创建它们,如下所示:
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)
产生:
最后,您可以根据需要创建一个子图,如下所示:
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)
导致:
对于任何值得的东西,当您想在 之外创建子图时,的 API的ax
参数似乎nx.draw
是无用的,因为有一些调用使其依赖于接口。没有真正深入研究为什么会这样,只是想我会指出这一点。matplotlib
pylab
nx.draw
gca
pylab
的源代码nx.draw
相当简单:
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
- 使用 . 从环境中捕获图形
gcf
。
Axes
如果一个对象不存在,则将一个对象添加到图形中,否则使用 . 从环境中获取它gca
。
- 使情节面颜色为白色
- 打开
hold
_
- 用内部函数绘制它
- 关闭轴
- 最后,如果我们处于交互模式,绘制它并重新引发任何捕获的异常