首页 > 解决方案 > 无论我做什么,Matplotlib 交互模式都不起作用

问题描述

我在 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(块=假)

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")

再次,空白图形窗口,单击它后崩溃。

离子()和块=假

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")

再次,空白图形窗口,单击它后崩溃。

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

标签: pythonmatplotlibplotfigurepython-interactive

解决方案


您需要添加一个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")

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


推荐阅读