Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib-如何使实时图表的计时器工作_Python_Graph_Matplotlib_Charts_Plot - Fatal编程技术网

Python Matplotlib-如何使实时图表的计时器工作

Python Matplotlib-如何使实时图表的计时器工作,python,graph,matplotlib,charts,plot,Python,Graph,Matplotlib,Charts,Plot,代码的框架粘贴在下面。当我在计时器上更新时,图形的大小不可调整,并且Ctrl+C在运行python脚本的终端中不起作用。我认为问题是一个无限循环: on_fig_update_event() -> redraw() ->gen_data() ->on_fig_update_event() 但我既不知道如何打破这个循环,也不确定这是一个问题。 请查看下面的代码,如果您有任何想法,请告诉我: class MyLiveChart(object): def __init__(sel

代码的框架粘贴在下面。当我在计时器上更新时,图形的大小不可调整,并且Ctrl+C在运行python脚本的终端中不起作用。我认为问题是一个无限循环:

on_fig_update_event() -> redraw() ->gen_data() ->on_fig_update_event()
但我既不知道如何打破这个循环,也不确定这是一个问题。 请查看下面的代码,如果您有任何想法,请告诉我:

class MyLiveChart(object):

def __init__(self, my_params):
    # Other stuff involving my_params
    plt.connect('button_press_event', self.on_fig_update_event)
    plt.connect('motion_notify_event', self.on_fig_update_event)
    plt.connect('key_press_event', self.on_fig_update_event)

    plt.connect('key_press_event', self.read_input_from_console)
    plt.connect('key_release_event', self.read_input_from_console)
    plt.connect('button_press_event', self.read_input_from_console)
    plt.connect('motion_notify_event', self.read_input_from_console)
    self.run()

def on_fig_update_event(self, _):
    self.redraw()

def redraw(self):
    plt.clf()
    self.gen_data()
    plt.draw()

def run(self):
    self.figure = plt.figure(figsize=(16, 8))
    self.gen_data()
# Other stuff
    plt.show()

def gen_data(self):
    # Other stuff
    fig = plt.subplot2grid((num_cols, num_rows), (col, row), rowspan=rowspan,
                               colspan=colspan)
    timer = fig.figure.canvas.new_timer(interval=10000, callbacks=[(self.on_fig_update_event, [None], {})])
    timer.start()
# Other stuff
    plt.grid()
    plt.tight_layout()

尝试使用
plt.connect(…,self.read\u input\u from\u console)
禁用线路,然后查看
ctrl-c
是否有效。您可能需要添加处理
sigint
大小调整问题如何?很难说,因为您的代码在运行时没有任何作用。你能提供一个你的代码的工作示例吗?如果你想要一个动画图表,为什么不看看,然后调整
animate
函数来做你想做的。在这里使用OO界面也会更安全。