看到同事用matlab分析数据,画折线图,很直观的把我们的试车数据(转速、车速、电压、电流)表现在图上,很轻易的就定位到了故障点。还用同样的方法分析了六轴传感器的加速度和角速度,解决了四元数算法、零飘问题。感觉画图分析数据很有用,这技能需要掌握才行。
网上找了一下,发现可用matlab、R语言、python画图。最终选了python,原因嘛,被“人生苦短我用python”,洗脑了好久。
因为c用得比较多,感觉python用得好懵,没有代码块{},竟然是用缩进来表示作用域。。。
(1)Csv数据
数据格式如下图,老大用树莓派收集的,为啥有个*号,我也不知道。
(2)遇到的坑
1、np.loadtxt,dtype=str导入的数据是numpy_str格式,用np.str_("0x1028d0d4")创建的字符串才能匹配。
2、创建数组
3、用切片把数据第5、6位提取出来。
(3)代码
importnumpy as npimportmatplotlib.pyplot as pltimportmatplotlib.dates as mdates#np.set_printoptions(threshold=np.inf) # 去掉print省略的内容
#导入数据
time,id,info=np.loadtxt('20190711.csv',dtype=str,delimiter=',',usecols=(0,1,2),unpack=True)
vmcId= np.str_("0x1028d0d4")#i为匹配ID的帧数量
i =0
count=0while (count
i= i + 1count= count + 1
#创建数组
print(i)
engineTime=np.zeros(i)
engineSpeed= np.zeros(i, dtype =np.int)
vehicleSpeed= np.zeros(i, dtype =np.int)#将数据保存至数组
i =0
count=0while (count
engineTime[i]=float(time[count])
engineSpeed[i]= int(info[count][11:13]+info[count][9:11],16)
vehicleSpeed[i]= engineSpeed[i]/7.42/60*1.96*3.6i= i + 1count= count + 1plt.figure(1) #第一个图形
plt.subplot(2,1,1) #第一个图形的第一个子图。看成2行1列,当前为第1行
plt.plot(engineTime,engineSpeed,linewidth=0.5)
plt.subplot(2,1,2) #第一个图形的第二个子图
plt.plot(engineTime,vehicleSpeed,linewidth=0.5)
plt.figure(2) #第一个图形#默认subplot(1,1,1)
plt.plot(engineTime,engineSpeed,'g-',linewidth=0.5)
plt.show()
(4)效果图
两个折线图都在同一个figure。
单独的figure