首页 > 解决方案 > 如何生成绘图,暂停程序直到图形关闭,然后返回主函数

问题描述

我目前正在尝试创建一个可以让我快速消化数据的程序。程序的开头(未显示)接收数据并对其进行处理以使其易于阅读。我遇到的问题涉及如何创建一个主函数,在生成并随后关闭图形后程序将继续返回该函数,以便更容易地查看一个接一个的多个图形。

问题陈述:我想生成一个图形,让它弹出,并在图形显示在屏幕上时让程序在后台暂停。然后,当它关闭时,我希望程序恢复并返回主程序。

当前的障碍:我尝试了多种不同的方法来创建图形,但我似乎无法同时做到这两种:(a) 正确生成图形,以及 (b) 让程序同时恢复并返回到 main。我发现 'try --> finally' 方法可以帮助我回到主函数,但是现在我的图表不会出现并且内核崩溃了。

代码如下:

import matplotlib.pyplot as plt

class App(cmd.Cmd):

    prompt = 'Plot an Individual Pulse (a) or the entire array of data (b)? Just type a or b please: '

    def do_a(self, arg):
        userchoice= input('Would you like to see (a) Trimmed Data, or (b) another option (which the code is omitted for space)')
        if userchoice == "a":
            try:
                plt.plot(TrimmedVal)
                plt.title("All Trimmed Data (Includes 0's)")
                plt.ylabel("Number of Particles")
                plt.xlabel("Time (s)")
                plt.ticklabel_format(style='sci', axis='y', scilimits=(0,0))
                plt.draw()
                while plt.fignum_exists(1):
                    plt.pause
                return 
            finally: App().cmdloop()

if __name__ == '__main__':
    App().cmdloop()   

标签: pythonmatplotlib

解决方案


您要求的是非交互模式下的默认设置,即如果您运行脚本或plt.ioff()在交互解释器中调用。

import matplotlib.pyplot as plt

def myfunc():
    plt.plot(..)
    plt.show()

def main()
    myfunc()
    print("we're back in main")

main()

推荐阅读