优化Matplotlib图,动态更新并保持交互

时间:2016-11-28 10:33:14

标签: python user-interface matplotlib plot multiprocessing

好的,正如问题建议的那样,我正在追逐创建情节的最佳方法:

1)独立于主程序/脚本,因此对绘图进行更改将对主程序/脚本没有不利(锁定或其他)影响

2)可以通过matplotlib的默认GUI或其他自定义GUI进行交互

现在,我对上述标准的看法是:

1)使用多处理模块及其多处理队列将X,Y信息传递给附加到当前X,Y数据并刷新绘图的单独进程。 这基本上解决了标准1。

2)确保打开matplotlib的交互模式(ion()),无限while True:循环检查上述队列,如果没有X,Y信息,则允许通过{{1}处理GUI事件}

为简化起见,下面是我接受传入的X,Y数据并以伪代码绘制它的代码。此代码在不同的进程中运行,其中Queue为其提供X,Y数据。

pyplot.pause(interval in seconds)

以上是否可以优化以增加与图形GUI的交互性?可能通过允许GUI事件独立于正在更新的图来进行服务?这种方法变得越慢,它必须做的更新就越多(即如果同一图上有更多的图表需要更新)

任何澄清,只要问:)

1 个答案:

答案 0 :(得分:0)

我会通过队列传递x,y数据(如已计划的那样),但会将get-command与block-argument结合使用。这样,您的绘图功能会阻塞,直到队列中有元素。如果没有,则函数暂停,并且可以处理应用程序中的所有其他事件。

类似的东西:

def process_data(inqueue):
    #create your plot

    for infile in iter(inqueue.get(block=True), "STOP"):
        #update plot until inqueue.get returns "STOP"
        #waits for elements in the queue enter code here

def main():
    inqueue = Queue()
    process = Process(target=process_data, args=(inqueue,)
    #can be stopped by putting "STOP" via inqueue.put into the queue
    process.start()
    #put some data in the queue