python - 无论我做什么,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")
再次,空白图形窗口,单击它后崩溃。
我该怎么做才能使其正常工作?
解决方案
您需要添加一个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")
如果你想要比这更复杂的东西,你会有一个循环,你在每次迭代中重绘图形(例如,如果你想显示不同的图形)并在每次迭代结束时暂停。
推荐阅读
- python - 从 python 类继承变量而不使用 init 或父类的类名
- javascript - 拖放事件有时不执行 DOM
- android - Firebase ml视觉图像标签模型颤振依赖错误
- java - 在特定时间显示通知
- numpy - 具有多个数组的 Numpy 元素加法
- java - 将 For 表达式更改为 lambda Java 8
- python - 不能用递归引用腌制对象
- django - Django REST Knox 身份验证问题
- azure - Azure CosmosDB 存储过程以更新所有项目的字段
- python - 如何使用for循环或while循环根据条件在字符串中查找单词