动态更新Matplotlib



我想用我的Notebook中的每个时间步更新单个Matplotlib图。我在StackOverflow上引用了大量的API资源和示例论坛答案,然而,所有建议的代码要么没有图表,要么在每个时间步显示一个新的数字,就像这个答案,

import matplotlib.pyplot as plt
import time
import random
from collections import deque
import numpy as np
# simulates input from serial port
def random_gen():
while True:
val = random.randint(1,10)
yield val
time.sleep(0.1)

a1 = deque([0]*100)
ax = plt.axes(xlim=(0, 20), ylim=(0, 10))
d = random_gen()
line, = plt.plot(a1)
plt.ion()
plt.ylim([0,10])
plt.show()
for i in range(0,20):
a1.appendleft(next(d))
datatoplot = a1.pop()
line.set_ydata(a1)
plt.draw()
print a1[0]
i += 1
time.sleep(0.1)
plt.pause(0.0001)                       #add this it will be OK.

和这个答案

import numpy as np
import matplotlib.pyplot as plt
plt.axis([0, 10, 0, 1])
for i in range(10):
y = np.random.random()
plt.scatter(i, y)
plt.pause(0.1)

如何在Python中通过Matplotlib或可能的其他手段更新每个时间步的数字?谢谢你的意见。

谢谢你:)

通过进入matplotlib的交互模式实时绘图。如果只使用plt.show()绘图,程序会停止执行后续程序,所以通过plt.ion()打开绘图窗口进入交互模式,使用程序plt.plot()进行实时绘图,绘图完成后,使用plt. ioff()退出交互模式,使用plt.show()显示最终的图像数据。如果末尾没有添加plt.show(),它会回闪。

import matplotlib.pyplot as plt
import numpy as np
ax=[]  
ay=[]
bx=[]   
by=[]
num=0  
plt.ion()    
# plt.rcParams['savefig.dpi'] = 200 
# plt.rcParams['figure.dpi'] = 200 
plt.rcParams['figure.figsize'] = (10, 10)        
plt.rcParams['font.sans-serif']=['SimHei']   
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['lines.linewidth'] = 0.5   
while num<100:
plt.clf()    
plt.suptitle("TITLE",fontsize=30)            
g1=np.random.random()  

ax.append(num)      
ay.append(g1)       
agraphic=plt.subplot(2,1,1)
agraphic.set_title('TABLE1')      
agraphic.set_xlabel('x',fontsize=10)   
agraphic.set_ylabel('y', fontsize=20)
plt.plot(ax,ay,'g-')                
#table2
bx.append(num)
by.append(g1)
bgraghic=plt.subplot(2, 1, 2)
bgraghic.set_title('TABLE2')
bgraghic.plot(bx,by,'r^')
plt.pause(0.4)     
if num == 15:
plt.savefig('picture.png', dpi=300) 
#break
num=num+1
plt.ioff()       
plt.show()       

最新更新