无论我做什么,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")
如果你想要比这更复杂的东西,你可以有一个循环,在这个循环中你在每次迭代中重新绘制图形(例如,如果你想显示不同的图形)并在每次迭代结束时暂停。
我在 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")
如果你想要比这更复杂的东西,你可以有一个循环,在这个循环中你在每次迭代中重新绘制图形(例如,如果你想显示不同的图形)并在每次迭代结束时暂停。