python 动态可视化_python动态可视化

简单实用的python动态可视化,非animation

语言&工具:python-matplotlib

以前在实现这个的时候,找了很多很多的文章,方法,都不能符合我实现动态可视化的需求

很多文章,要么不是动态,要么代码根本就调不通,要么就是些教程。下面的代码的数据源

是实时动态的,结果显示是动态折线图。

优点:实时接收数据,动态展示数据,频率:一秒10个数据,能够直观看出数据的波动情况

缺点:折线图看起来不那么流畅,不像心电图那种平滑,跟ROS自带的rqt工具效果是一样样的

上代码:

#!/usr/bin/env python2

# coding=utf-8

import matplotlib.pyplotas plt

import time

'''

data2image函数,从订阅器生成的文件中实时提取数据生matplotlib动态曲线图

'''

def image(list1,line1):

speed= map(float,line1[0].split())

time.sleep(0.1)

#  把数据放入list

list1.extend(speed)

#  设置子图1

ax1= plt.subplot(3,1,1)

plt.cla()

#  设置网格线-子标题-x-y轴的颜色; 类型; 粗细

ax1.grid(color='purple',linestyle='--',linewidth=1,alpha=0.3)

ax1.set_title('Speed Curve',fontsize=20,color='pink')

ax1.set_xlabel('time',fontsize=15,color='deepskyblue')

ax1.set_ylabel('speedValue',fontsize=15,color='g')

#  如果列表长度大于30,擦除前面的数据,只显示最新的30个

if len(list1)>= 100:

ax1.plot(range(100),list1[-100:],color='r',markerfacecolor='r',marker='o',markersize=1)

# ax1.plot(range(30), yy[-30:], color='orange', markerfacecolor='r', marker='o', markersize=2)  # 有需要可以一图多曲线

else:  # 否则显示当前的数据

ax1.plot(range(len(list1)),list1,color='r',markerfacecolor='r',marker='o')

# ax1.plot(range(len(yy)), yy, color='orange', markerfacecolor='r', marker='o')

#  设置子图或标题间的间距

#plt.tight_layout(pad=5.0, w_pad=5.0, h_pad=3.0)

plt.pause(0.01)

def data2image(Speed):

#  订阅器中生成的存储计算数据的文件

speed_data= open(Speed)

#  定义一个空列表

list1= []

#  设置图像的大小,图像曲线的粗细度

plt.rcParams['figure.figsize']= (12,15)

plt.rcParams['lines.linewidth']= 1.5

#  设置总图像的大标题文字,标题内容,字体颜色

plt.suptitle('Real Time Image',fontsize=20,color='teal')

while 1:

line1= speed_data.readlines()

#  读取dat文件内容,读取出来是[‘字符串’]的形式

if not line1:  # 如果没有数据,等待6秒,6秒内回复产出数据,再次画图,否则down

print 'no data output,wait for 6secs'

time.sleep(6)

if line1:

image(list1, line1)

else:  # 如果长时间没有数据,判断为程序停止,输出最终的计算结果

plt.close()

break

else:  # 有数据,处理数据并实时画图

image(list1, line1)

if __name__== '__main__':

# 这里的文件是从订阅器接收数据,订阅器是个loop所以不能直接可视化,中间转储到.dat文件,再从.dat文件实时读取

Speed= '~/opt/data/speed.dat'

data2image(Speed)

#Tips:本人的环境是ROS开发平台,所以自带的是python2,有需要可以换成3,方法如上,具体放自己环境调整下就能用

如果觉得对大家有帮助,我很开心!如果大神们有更好的方法,也请不吝赐教

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值