无论我做什么,Matplotlib 交互模式都不起作用

Matplotlib interactive mode won't work, no matter what I do

我在 Pycharm 社区 2020.1

上使用 python 3.7.7 和 matplotlib 3.3.1

我想画一个图形,然后通过提供一些控制台输入让用户决定他是否喜欢这个图形。这意味着我需要 matplotlib 在交互模式下工作。 我尝试了以下许多我在网上找到的方法:

plt.ion() 单独

import matplotlib.pyplot as plt
plt.ion()
plt.plot([1,2,3])
plt.show()


print('is this fig good? (y/n)')
x = input()
if x=="y":
    plt.savefig(r'C:\figures\papj.png')
else:
    print("big sad")

这只会产生空白图 window。如果你点击 window 太多,它将“停止响应”。

plt.show(块=假)

import matplotlib.pyplot as plt    
plt.plot([1,2,3])
plt.show(block=False) 

print('is this fig good? (y/n)')
x = input()
if x=="y":
    plt.savefig(r'C:\figures\papj.png')
else:
    print("big sad")

与之前相同的结果。

plt.draw()

import matplotlib.pyplot as plt

plt.plot([1,2,3])
plt.draw()


print('is this fig good? (y/n)')
x = input()
if x=="y":
    plt.savefig(r'C:\figures\papj.png')
else:
    print("big sad")

这什么都不做,只是在控制台中显示问题。

plt.ion() 和 plt.draw()

import matplotlib.pyplot as plt
plt.ion()
plt.plot([1,2,3])
plt.draw()


print('is this fig good? (y/n)')
x = input()
if x=="y":
    plt.savefig(r'C:\figures\papj.png')
else:
    print("big sad")

同样,空白图 window,点击后崩溃。

ion() 和 block=False

import matplotlib.pyplot as plt
plt.ion()
plt.plot([1,2,3])
plt.show(block=False)


print('is this fig good? (y/n)')
x = input()
if x=="y":
    plt.savefig(r'C:\figures\papj.png')
else:
    print("big sad")

同样,空白图 window,点击后崩溃。

我该怎么做才能使其正常工作?

您需要添加一个 pause 以避免图形被“锁定”并在图形仍在显示时获取用户输入。

import matplotlib.pyplot as plt
plt.ion()
plt.plot([1,2,3])
plt.pause(0.01) # <---- add pause
plt.show()

print('is this fig good? (y/n)')
x = input()
if x=="y":
    plt.savefig(r'C:\figures\papj.png')
else:
    print("big sad")

如果你想要比这更复杂的东西,你可以有一个循环,在这个循环中你在每次迭代中重新绘制图形(例如,如果你想显示不同的图形)并在每次迭代结束时暂停。