看到同事用matlab分析数据,画折线图,很直观的把咱们的试车数据(转速、车速、电压、电流)表如今图上,很轻易的就定位到了故障点。还用一样的方法分析了六轴传感器的加速度和角速度,解决了四元数算法、零飘问题。感受画图分析数据颇有用,这技能须要掌握才行。python
网上找了一下,发现可用matlab、R语言、python画图。最终选了python,缘由嘛,被“人生苦短我用python”,洗脑了很久。算法
由于c用得比较多,感受python用得好懵,没有代码块{},居然是用缩进来表示做用域。。。数组
(1)Csv数据spa
数据格式以下图,老大用树莓派收集的,为啥有个*号,我也不知道。3d
(2)遇到的坑code
一、np.loadtxt,dtype=str导入的数据是numpy_str格式,用np.str_("0x1028d0d4")建立的字符串才能匹配。blog
二、建立数组作用域
三、用切片把数据第五、6位提取出来。字符串
(3)代码it
import numpy as np import matplotlib.pyplot as plt import matplotlib.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 = 0 while (count < np.size(time)): if id[count] == vmcId: i = i + 1 count = 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 = 0 while (count < np.size(time)): if id[count] == vmcId: 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.6 i = i + 1 count = count + 1 plt.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