gpt4 book ai didi

python - networkx 与 matplotlib 的交互

转载 作者:太空狗 更新时间:2023-10-29 21:22:27 25 4
gpt4 key购买 nike

我正在 matplotlib 中尝试 networkx 和可视化,我很困惑,因为我不清楚它们是如何相互作用的?有简单的例子

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, etc ...}所以,如果我想画 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:对不起我的英语。

最佳答案

如果您想单独绘制图形或创建单个 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

无论它的值(value)如何,nx.drawax 参数对于 matplotlib 的 API 来说都是无用的当你想要在 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
  1. 使用 gcf 从环境中捕获图形。
  2. 然后将 Axes 对象添加到图中(如果不存在),否则使用 gca 从环境中获取它。
  3. 将绘图面颜色设为白色
  4. 开启保持
  5. 用内部函数绘制
  6. 关闭轴
  7. 最后,如果我们处于交互模式,绘制它并重新引发捕获到的任何异常

关于python - networkx 与 matplotlib 的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18563766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com