如何在按下某个键或单击鼠标之前暂停一个pylab图形?

use*_*369 10 python matplotlib

我正在尝试使用pylab和networkx编写动画模拟.模拟并不是一直很有趣,所以大部分时间我都希望它能够快速运行,但是,我希望能够暂停它并在它看起来很有趣时看一下它.暂停屏幕直到按键才能解决我的问题,因为我可以按我想要的速度快慢按键.

这是一个示例情况:

import numpy as np
import networkx as nx
import pylab as plt
import sys

def drawGraph(matrix):
    plt.clf()
    G = nx.DiGraph(np.array(matrix))
    nx.draw_networkx(G)
    plt.draw()

    plt.pause(1) #I want this pause to be replaced by a keypress
    #so that it pauses as long as I want

A=[[0,1],[1,0]]
B=[[0,1],[0,0]]
x=1
while True:
    if x==1:
        drawGraph(A)
        x=0
    else:
        drawGraph(B)
        x=1
Run Code Online (Sandbox Code Playgroud)

我应该如何重写plt.pause(1)行,以便程序暂停直到按下?

其他线程中建议的某些方法会暂停程序,但图片会消失或不会更新.

小智 50

有没有理由不使用waitforbuttonpress()?

import matplotlib.pyplot as plt

A=[[0,1],[1,0]]
B=[[0,1],[0,0]]
x=1
while True:
    if x==1:
        drawGraph(A)
        x=0
    else:
        drawGraph(B)
        x=1
    plt.waitforbuttonpress()
Run Code Online (Sandbox Code Playgroud)

正如它所说,这将等待按键或按钮按下以发生某些事情.如果您想了解有关该事件的更多信息,它会返回值.很容易.


HYR*_*YRY 8

单击鼠标停止并重新启动以下代码.它使用"TKAgg"后端:

import numpy as np
import networkx as nx
import matplotlib
matplotlib.use("TkAgg")

import pylab as plt
plt.ion()

fig = plt.figure()

pause = False

def onclick(event):
    global pause
    pause = not pause

fig.canvas.mpl_connect('button_press_event', onclick)

def drawGraph(matrix):
    fig.clear()
    G = nx.DiGraph(np.array(matrix))
    nx.draw_networkx(G)
    plt.draw()

A=[[0,1],[1,0]]
B=[[0,1],[0,0]]
x=1
while True:
    if not pause:
        if x==1:
            drawGraph(A)
            x=0
        else:
            drawGraph(B)
            x=1
    fig.canvas.get_tk_widget().update() # process events
Run Code Online (Sandbox Code Playgroud)