Python 如何在Jupyter笔记本上迭代绘制图形

Python 如何在Jupyter笔记本上迭代绘制图形,python,matplotlib,graph,jupyter-notebook,networkx,Python,Matplotlib,Graph,Jupyter Notebook,Networkx,我正在使用增量图形,因此每次在上一个图形的顶部插入新边时,我都要绘制当前图形 使用这段代码,我可以一次生成一个图形,但它们只在迭代结束后显示 import random import time import networkx as nx import matplotlib import matplotlib.pyplot as plt import numpy as np %matplotlib notebook #Generating some random edges M = 10 N =

我正在使用增量图形,因此每次在上一个图形的顶部插入新边时,我都要绘制当前图形

使用这段代码,我可以一次生成一个图形,但它们只在迭代结束后显示

import random
import time
import networkx as nx
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
%matplotlib notebook

#Generating some random edges
M = 10
N = 4
edges = []
for i in range(M):
    s = random.randrange(N) + 1
    t = random.randrange(N) + 1
    edges.append((s,t))

G = nx.DiGraph()
G.add_nodes_from(range(1, 5))

plt.subplot(121)
plt.ion()

nx.draw(G, with_labels=True, font_weight='bold')

for edge in edges:
    plt.figure()
    G.add_edge(*edge)
    nx.draw(G, with_labels=True, font_weight='bold')
    time.sleep(1)
但我真正想要的是在每次迭代中看到图被重新绘制,或者至少能够使用Matplotlib的交互模式来堆叠它们,这样我就可以前进和后退


我已经搜索了好几天,发现了一些使用条形图、饼图等图形的示例,但我指的是数据结构,而不是图表。

这里有一个使用
FuncAnimation
的建议,它大大简化了在
matplotlib

import random
import time
import networkx as nx
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
%matplotlib notebook

#Generating some random edges
M = 10
N = 4
edges = []
for i in range(M):
    s = random.randrange(N) + 1
    t = random.randrange(N) + 1
    edges.append((s,t))

G = nx.DiGraph()
G.add_nodes_from(range(1, 5))

fig = plt.figure()
ax = plt.subplot(121)

def init():
    nx.draw(G, with_labels=True, font_weight='bold')

def update(edge):
    G.add_edge(*edge)
    nx.draw(G, with_labels=True, font_weight='bold')

ani = animation.FuncAnimation(fig, update, frames=edges, interval=1000., init_func=init, repeat=False)

plt.draw()
将更新交互式绘图<代码>暂停(…)将添加暂停
time.sleep(1)
将只阻塞python一秒钟,这在这里没有多大意义。嗯,这很有趣,但即使使用“plt.pause”,图形在暂停时间内也不会显示。哦,我刚刚看到你每秒都创建一个新图形。这肯定没有帮助。我可以使用
IPython.display.clear_output()
清除屏幕,但在暂停间隔期间不会绘制任何内容。Matplotlib的交互模式显然可以选择在单个帧中堆叠视图,但我不知道怎么做。非常感谢,这正是我想要的。我刚刚在update方法中添加了
plt.cla()
,以便在绘制下一个图形之前清除上一个图形。不客气。如果你认为你的问题解决了,考虑接受答案,使用左边的检查标记来关闭这个主题。