K 这是我正在尝试做的事情的一个更精确的例子。我正在使用WXBuilder for Python作为具有多种绘图功能的用户界面,即用户必须能够根据他们选择的参数绘制图形。绘制图形后,我希望用户能够在不关闭第一个图形的情况下绘制第二个图形。这是为了进行比较。下面是我想做的事情的一个过于简化的例子。
import matplotlib as plt
def OnPlotClick1(self, event):
plt.plot(self.DateArray1, self.kVAArray2)
plt.show()
def OnPlotClick2(self, event):
plt.plot(self.DateArray1, self.kVAArray2)
plt.show()
现在我假设我的问题是由于绘制和显示()图形而引起的,因此程序不知何故被阻止功能,直到第一个图形或绘图窗口关闭。
我希望这能更好地解释我的问题。
你不应该阻止显示。用:
import matplotlib.pylab as plt
plt.plot([1,2,3]) # first plot
plt.show(block=False) # do not block
plt.plot([11,21,31]) # second plot
每个窗口都是 matplotlib 的说法,一个新的数字。您可以调用plt.subplots
两次以创建两个数字:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000)
y1 = np.sin(x)*np.exp(-x/5.0)
y2 = np.sin(x**2)*x
fig1, ax1 = plt.subplots()
ax1.plot(x, y1)
fig2, ax2 = plt.subplots()
ax2.plot(x, y2)
plt.show()
请注意,plt.show()
启动 GUI 事件循环,因此通常每个脚本只应调用一次。
您还可以在同一图中绘制 2 个或 2 个以上的绘图仪
import matplotlib.pyplot as plt
def my_plotter(ax, data1, data2, param_dict):
out = ax.plot(data1, data2, **param_dict)
return out
fig, (ax1, ax2) = plt.subplots(1, 2)
#here you put your data
data1=[0,1,2,3,8]
data2=[0,1,2,3,8]
data3=[0,1,2,3,8]
data4=[0,1,2,3,8]
my_plotter(ax1, data1, data2, {'marker':'x'})
my_plotter(ax2, data3, data4, {'marker':'o'})
plt.show()
您可以遵循@(损坏的MyStack)建议或使用交互式图形设计。跑
plt.ion()
一次,在你开始剧情之前的任何时间。将其关闭
plt.ioff()