问题描述
我在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")
这仅在空白图形窗口中产生。如果您过多点击该窗口,它将“停止响应”。
plt.show(block = False)
import matplotlib.pyplot as plt
plt.plot([1,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,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,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")
同样,空白图形窗口在单击后崩溃。
ion()和block = False
import matplotlib.pyplot as plt
plt.ion()
plt.plot([1,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")
同样,空白图形窗口在单击后崩溃。
我该怎么做才能使其正常工作?
解决方法
您需要添加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")
如果您需要比这更复杂的内容,则将有一个循环,在该循环中您可以在每次迭代中重绘该图形(例如,如果要显示不同的图形),并在每次迭代结束时立即暂停。