使用 matplotlib 绘制第二个图形,而第一个图形仍然打开



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

最新更新