matplotlib.plot.show始终阻止python脚本的执行,即使脚本已完成

时间:2018-11-01 08:20:22

标签: python matplotlib

没有重复的答案,因为我总是被下面的解决方案阻止!!!!!!!

我想绘制一个图形,并且仍然运行以下代码,而无需像Matlab那样自动关闭图形

我尝试plt.show(block=False),但它失败了,一会儿出现然后合上。

代码:

import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
    plt.figure(figsize=(10, 10))
    plt.plot(range(5), lw=2, label='Real')
    plt.title('Prediction')
    plt.legend(loc="best")
    plt.show(block=False)
    print("---Plot graph finish---")

我尝试plt.draw() or interactive mode,它也失败了。检查下面的代码。

代码:

import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
    plt.figure(figsize=(10, 10))
    plt.plot(range(5), lw=2, label='Real')
    plt.title('Prediction')
    plt.legend(loc="best")
    plt.draw()
    plt.show()
    print("---Plot graph finish---")

上面将阻止直到我关闭它。

代码:

import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
    plt.ion()
    plt.figure(figsize=(10, 10))
    plt.plot(range(5), lw=2, label='Real')
    plt.title('Prediction')
    plt.legend(loc="best")
    plt.draw()
    plt.show()
    print("---Plot graph finish---")

以上将什么也不会出现,或者它很快就会消失。

我的版本如下:

user@ya:~/$ sudo pip freeze | grep matplotlib
matplotlib==2.2.3
user@ya:~/$ sudo pip -V
pip 18.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)

环境:

I only execute script in Ubuntu ex: user@ya: python xxx.py
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:    16.04
Codename:   xenial

有人可以帮助我吗?我只想做Matlab,即使脚本完成也不会关闭绘制的图形。

1 个答案:

答案 0 :(得分:0)

脚本完成后,即使您使用block=False

,图也会关闭

类似于答案here,从终端运行时,必须在脚本结尾处调用plt.show,以在完成后保持这些图的打开状态。我编写了与您相似的代码,可以正常工作;该图仅在代码末尾刷新。 (添加了for循环5秒钟的延迟,以便您可以看到它正在运行)。

import numpy as np
import matplotlib.pyplot as plt
import time


if __name__ == '__main__':
    plt.figure(figsize=(10, 10))
    plt.plot(range(5), lw=2, label='Real')
    plt.title('Prediction')
    plt.legend(loc="best")
    plt.show(block=False)
    print("---Plot graph finish---")
    for i in range(5):
        print('waiting...{}'.format(i))
        time.sleep(1)
    print('code is done')
    plt.show()