用matplotlib绘制传入的数字流

2024-05-26 19:54:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把一个传入的数字流绘制成一个实时图形。目前,它所做的只是显示一个没有内容的灰色图形窗口。数据按我的预期打印到终端。在

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]

Tags: import图形datamatplotlibstyleasnpplt
2条回答

plt.draw()替换为plt.pause(t),其中t是帧之间等待的时间(不应为0)。这确保了图形实际上有时间进行更新,并且GUI可以处理任何事件。在

如果不是plt.draw(),而是调用fig.canvas.draw(),它是否解决了问题?更新的方法属于canvas对象。使用pyplot的基于状态的接口会使被引用的对象变得不那么清楚,您可能更喜欢OO接口。尤其是因为您保留了对fig的引用,所以最好显式地调用它。在

相关问题 更多 >

    热门问题