我想将输入的数字流绘制为实时图形。目前,它只是显示一个没有内容的灰色图形窗口。数据将按照我的预期打印到终端。
import socket
import matplotlib as m
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
from matplotlib import style
style.use('fivethirtyeight')
fig = plt.figure()
plt.axis([0,10,0,1])
plt.ion()
samples = 15*200
channels = [np.linspace(start= 0, stop = 0,num = samples)]
def animate():
plt.plot(range(0,samples),channels[0])
plt.draw()
UDP_IP = "127.0.0.1"
UDP_PORT = 8888
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
k = 0
while True:
data, addr = sock.recvfrom(2048) # buffer size is 1024 bytes
# write data to channel
channels[0][k % samples] = eval(data)[0]
animate()
print channels[0][k % samples]
答案 0 :(得分:1)
将plt.pause(t)
替换为t
,get_json()
是在帧之间等待的时间(不应为0)。这确保了数字实际上有时间更新,GUI可以处理任何事件。
答案 1 :(得分:1)
如果不是plt.draw()
,而是拨打fig.canvas.draw()
,是否可以解决问题?更新方法属于canvas对象。使用pyplot的基于状态的接口使得不太清楚哪个对象被引用,您可能更喜欢OO接口。特别是因为您保留对fig
的引用,您可以明确地将其称为。</ p>