一、数据格式
二、程序read_imu.py
# coding=UTF-8import cv2import numpy as npimport matplotlib.pyplot as pltfrom matplotlib import pyplot as pltimport pylabimport math#从.txt中读取数据 的函数def loadData(fileName):inFile = open(fileName, 'r')#以只读方式打开某filename文件#定义2个空的list,用来存放文件中的数据t = []diff_x = []diff_y = []sum_xy = []for line in inFile:trainingSet = line.split(',')#对于上面数据每一行,按' '把数据分开,这里是分成两部分t.append(float(trainingSet[0]))#第一部分,即文件中的第一列数据逐一添加到list t中diff_x.append(float(trainingSet[1]))#第二部分,即文件中的第二列数据逐一添加到list accx中diff_y.append(float(trainingSet[2]))#第三部分,即文件中的第三列数据逐一添加到list accy中# sum_xy.append( math.sqrt(float(trainingSet[2])*float(trainingSet[2]) + float(trainingSet[1])*float(trainingSet[1])) )return (t, diff_x, diff_y)(t, diff_x, diff_y) = loadData('/home/jht/VIns_Code/GVINS/output/Position_diff.txt')(t1, diff_x1, diff_y1) = loadData('/home/jht/VIns_Code/GVINS/output/HPL_NO_fault.txt')pylab.figure(1)#pylab.figure(figsize=(8,6)) # 定义图的大小pylab.plot(t, diff_x,linestyle='--',label='X', color="red",linewidth=1) # 线的粗细、颜色、标签pylab.plot(t, diff_y,linestyle='--',label='Y', color="blue",linewidth=1)# 线的粗细、颜色、标签pylab.legend(loc='best',fontsize=20)# pylab.legend 放在 plot后面才能显示label, 并且设置标签的字体大小pylab.xlabel("time(s)",fontsize=20) # 横轴pylab.ylabel("Position error (m)",fontsize=20)# 纵轴pylab.xticks(fontsize=20) # 设置【坐标】标签字体大小pylab.yticks(fontsize=20) #pylab.title("Example") # 标题#pylab.xlim([0,5000]) # X轴数据长度设定#pylab.ylim([0,1]) # y轴数据长度设定pylab.show()#让绘制的图像在屏幕上显示出来
常用功能备注1 :
plt.figure(figsize=(8,6)) # 定义图的大小
plt.xlabel("time(s)") # 横轴
plt.ylabel("Volt") # 纵轴
pylab.xticks([]) # 不显示X轴的刻度
pylab.yticks([]) # 不显示Y轴的刻度
plt.title("Example")#标题
plt.plot(X,Y,label="$sin(X)$",color="red",linewidth=2) # 线的粗细、颜色、标签
plt.legend() # 显示图例
plt.savefig('train_cc_kl_11_20.jpg')# 保存图像
//fig.savefig(path+'输出图片.svg',format='svg',dpi=150)
// 其中,format表示输出图片的类型,可以为tiff、jpg、png等格式,按需选择;dpi为像素大小,dpi越大,图片越清晰,占用内存也越大。
tips:svg是矢量图格式,在插入word中裁剪放大缩小的时候清晰度基本不会改变,且色彩不失真 (输出后在你定义的路径下即可找到)
常用功能备注2:
设置X、Y轴的标签与轴的距离
pylab.xlabel("time (s)",fontsize=15,labelpad = 15.5)
pylab.ylabel("2D error (m)",fontsize=15,labelpad = 15.5)
特定区域画阴影图
程序如下:
# coding=UTF-8import cv2import numpy as npimport matplotlib.pyplot as pltfrom matplotlib import pyplot as pltfrom scipy.stats import normfrom scipy.stats.distributions import chi2from scipy.stats import ncx2import pylab# 为了画阴影图准备x = np.arange(0,6016,1) # 6016是数据的个数# plotting the lines y1 = 600 # 两条y轴线之间区域阴影的确认y2 = 0a = 1*x# x轴区域阴影的确认 #从.txt中读取数据 的函数def loadData(fileName):inFile = open(fileName, 'r')#以只读方式打开某filename文件#定义2个空的list,用来存放文件中的数据t = []Num_sate = []TS = []TD = []for line in inFile:trainingSet = line.split(',') t.append(float(trainingSet[0]) - 1931.078) Num_sate.append(float(trainingSet[1])) TS.append(float(trainingSet[2])) TD.append( chi2.ppf(0.99, df=float(trainingSet[1])) )return (t,Num_sate,TS,TD)(t1,Num_sate1,TS1,TD1) = loadData('/home/jht/VIns_Code/GVINS/output/Ts_gnss_13_01.txt')pylab.figure(1)pylab.plot(t1, TD1,linestyle='--',label='Y', color="red",linewidth=1) pylab.plot(t1, TS1,linestyle='--',label='Y', color="black",linewidth=1) # 填充黄色大色块,画阴影区域的程序pylab.fill_between(t1, y1, y2,where = (a > 700) & (a <= 5200),facecolor='yellow', alpha=0.3)pylab.show()#让绘制的图像在屏幕上显示出来# pylab.figure(2)# plt.plot(px,py)# plt.ylabel('some numbers')# plt.show()#ppf_1 = norm.ppf(q=0.99999, loc=0, scale=1) #print(ppf_1)#ppf_1 = chi2.ppf(0.9899, df=120.0) #print(ppf_1) #ppf_2 = chi2.ppf(0.919, df=120.0) #print(ppf_2)
效果图如下:
注意:
1、 loadData('/home/hltt3838/kitti_data/_10_03_drive_0042_sync/imu_data_100hz/imu.txt')
读取数据时,可以是具体的文件地址:'/home/hltt3838/kitti_data/_10_03_drive_0042_sync/imu_data_100hz/imu.txt'
也可以是文件的名:' imu.txt', 但是imu.txt要和read_imu.py程序放在一个文件夹里面 !
2、pylab.show() 绘图
在MATLAB中 如果需要连续显示两个图,用hold on; 而在 python 中 只要把pylab.show()放在最后面就行了!
三、程序运行
cd kitti_data/_10_03_drive_0042_sync/imu_data_100hz// 进入文件夹
vim read_imu.py//创建名字叫 read_imu.py 的文件,把程序放里面
// 输入命令:vim read_imu.py,也可以是其他形式,vim helloworld.cpp或者vim me.txt,在vim界面输入i(此时变成输入模式),开始编写程序(或者把程序拷贝进去),程序编写好后按Esc键,输入:wq完成编写并保存该文件
python read_imu.py//运行程序
结果如下:
注意:
如果我们想画二维轨迹图,需要加入头文件:import matplotlib.pyplot as plt
然后加入下面的程序即可(变通理解):
pylab.figure(2)
plt.plot(px,py)
plt.ylabel('some numbers')
plt.show()
备注:一张图像显示两个图
(t, err_x, err_y) = loadData('P_diff.txt')
(t1, HPL_x, HPL_y) = loadData('HPL_camimu.txt')
pylab.figure(1)
pylab.plot(t, err_x,'-.')
pylab.plot(t1, HPL_x,'-')
pylab.xlabel('Horizontal axis title')
pylab.ylabel('Vertical axis title')
pylab.figure(2)
pylab.plot(t, err_y,'-.')
pylab.plot(t1, HPL_y,'-')
pylab.xlabel('Horizontal axis title')
pylab.ylabel('Vertical axis title')
四、读取和保存
4. 1 txt文件的读取与保存
def text_save(filename, data):#filename为写入txt文件的路径,data为要写入数据列表.file = open(filename,'a')for i in range(len(data)):s = str(data[i]).replace('[','').replace(']','')#去除[],这两行按数据不同,可以选择s = s.replace("'",'').replace(',','') +'\n' #去除单引号,逗号,每行末尾追加换行符file.write(s)file.close()print("保存txt文件成功")
# 读取txt文件with open("Dpreci.txt") as f:line = f.readlines()Dpreci = []for line in line:Dpreci.append(float(line))print('读取txt成功')
4. 2 csv文件的读取与保存
def data_write_csv(file_name, datas):#file_name为写入CSV文件的路径,datas为要写入数据列表file_csv = codecs.open(file_name,'w+','utf-8')writer = csv.writer(file_csv, delimiter=' ', quotechar=' ', quoting=csv.QUOTE_MINIMAL)for data in datas:writer.writerow(str(data))print("保存csv文件成功")
4. 3 文件的读取
path_json = path + name + '.json'with open(path_json, 'r') as load_f:load_dict = json.load(load_f)