如何解决使用Matplotlib中的极坐标直方图显示实时MQTT数据
我有一个MQTT客户端,它以每秒近10条消息的频率接收数据。 数据包含来自不同方向的声源信息。 我使用Matplotlib在Polar Histogram上显示了此信息。
我已经使用plt.pause(time)函数使图形动画化了。但是,使用这种方法会有很大的延迟,并且极坐标图的更新速度比我收到的数据要慢。
是否有任何方法可以使此过程更快,或者有什么更好的方法可以使用?我试图将时间值从1e-60更改为1e-3,但似乎没有任何区别。
任何帮助将不胜感激。
(注意: 我尝试使用matplotlib.animation(),但是问题是,应该同时执行两个循环(一个循环用于mqtt消息,另一个循环用于matplotlib动画)。因此,在这种情况下,一次只能执行一个循环。在此说明问题。 https://www.raspberrypi.org/forums/viewtopic.php?t=236811)
import os,sys,json,datetime
import paho.mqtt.client as mqtt
import numpy as np
import matplotlib.pyplot as plt
import math
ax = plt.subplot(111,projection='polar')
plt.title('Data from Sound Source')
theta = [0]*4
radii = [0]*4
bars = ax.bar(theta,radii,width=0.05,bottom=0.0)
#MQTT function for receiving messages periodically
def on_message(client,userdata,msg):
global theta,radii
ax.clear()
theta = [0]*4
radii = [0]*4
sources = json.loads(msg.payload)
length = len(sources)
for i in range(length):
x = (sources[i]['x'][0])
y = (sources[i]['x'][1])
theta[i] = math.atan2(y,x)
radii[i] = math.sqrt(x**2 + y**2)
bars = ax.bar(theta,width=0.1,bottom=0.0,tick_label=None)
plt.pause(1e-2) #to make graph wait to update the data
# MQTT variables
host = "localhost"
port = 1883
topic = "hark/data/sentenceinfo"
client = mqtt.Client("HRSUB") #create new instance
client.connect(host,port) #connect to broker
print("Subscribing to topic",topic)
client.subscribe(topic)
client.on_message = on_message
client.loop_forever()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。