这个链接展示了使用matplotlib进行实时绘图的例子。我认为主要的收获是你不需要在每次绘制时都使用plt.show()或plt.draw()。该例子使用set_ydata代替。类似地,可以使用set_xdata来更新x轴变量。以下是代码:
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('ggplot')
def live_plotter(x_vec,y1_data,line1,identifier='',pause_time=0.1):
if line1==[]:
plt.ion()
fig = plt.figure(figsize=(13,6))
ax = fig.add_subplot(111)
line1, = ax.plot(x_vec,y1_data,'-o',alpha=0.8)
plt.ylabel('Y Label')
plt.title('Title: {}'.format(identifier))
plt.show()
line1.set_ydata(y1_data)
if np.min(y1_data)<=line1.axes.get_ylim()[0] or np.max(y1_data)>=line1.axes.get_ylim()[1]:
plt.ylim([np.min(y1_data)-np.std(y1_data),np.max(y1_data)+np.std(y1_data)])
plt.pause(pause_time)
return line1
当我在下面的示例上运行此函数时,我没有任何问题使用计算机上的其他应用程序。
size = 100
x_vec = np.linspace(0,1,size+1)[0:-1]
y_vec = np.random.randn(len(x_vec))
line1 = []
i=0
while i<1000:
i=+1
rand_val = np.random.randn(1)
y_vec[-1] = rand_val
line1 = live_plotter(x_vec,y_vec,line1)
y_vec = np.append(y_vec[1:],0.0)