光栅数据处理
Python读取光纤解调仪tdms文件并转换为dataframe
import glob
from nptdms import TdmsFile
import pandas as pd
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
ROOTS = ['waterlevel_experimen_02mm'] #文件夹名:“waterlevel_experimen_02mm” 里面保存有多个不同时间点记录的tdms波长文件
names=["0.4mm"] #label,和文件夹名对应
def getlines(ROOT,name):
lines = []
path_files=sorted(glob.glob(pathname='/home/iint/zhaosheng/LZY/experimental_result/'+ROOT+'/*.tdms')) #或者指定文件夹下文件list
path_files=path_files[::-1]
x=[]
mean_value = []
for num,file in enumerate(path_files):
print(file)
# load file
tdms_file = TdmsFile(file)
# show groups
groups_data = tdms_file.groups()
#print("Groups Data:")
#print(groups_data)
#Groups Data:
#[<TdmsGroup with path /'Physical'>, <TdmsGroup with path /'wavelength'>]
# show channels
channels_data = tdms_file['wavelength'].channels()
#print("Channels Data:")
#print(channels_data)
#Channels Data:
#[<TdmsChannel with path /'wavelength'/'1通道1应变'>, <TdmsChannel with path /'wavelength'/'4通道1应变'>]
# show data in channel
selected_data = tdms_file['wavelength']['1通道1应变']
#print(selected_data.data)
x.append(selected_data.data)
mean_value.append(selected_data.data.mean())
# total用于保存所有数据
total=[]
for result in range(len(path_files)):
#添加平均值
total.append(x[result].mean())
for i,value in enumerate(x):
#
for num,bochang in enumerate(value):
lines.append([bochang,int(i+1)*5+15,num,name])
return lines,mean_value
for _ in range(len(ROOTS)):
ROOT = ROOTS[_]
name = names[_]
plt.figure(dpi=200)
#print(getlines(ROOT,name))
#print(np.array(getlines(ROOT,name)).shape)
all_data,mean_data = getlines(ROOT,name)
#list转dataframe
data=pd.DataFrame(all_data,columns=['Wavelength(nm)', 'Liquid Level(cm)','number','Thickness'])
#sns 箱线图
sns.boxplot(y='Wavelength(nm)',x= 'Liquid Level(cm)',data=data) #左图 hue="Thickness",liquid_level
#sns.regplot(y='Wavelength(nm)',x= 'Temperature(℃)',data=data) # 是否显示离群值,showfliers = False)
plt.show()
带误差棒的柱状图
import matplotlib.pyplot as plt
index = np.arange(5)
values = [5, 6, 3, 4, 6]
SD = [0.8, 2, 0.4, 0.9, 1.3]
plt.title('A Bar Chart')
plt.bar(index, values, yerr = SD, error_kw = {'ecolor' : '0.2', 'capsize' :6}, alpha=0.7, label = 'First')
plt.xticks(index+0.2,['a', 'b', 'c', 'd', 'e'])
plt.legend(loc=2)
plt.show()
带误差帮的折线图
def f_1(x, A, B):
return A * x + B
def get_line(x_list,y_list,err_list,title_list,title,xlabel,ylabel):
plt.figure(dpi=200)
r_list=[]
first_time=True
for num in range(len(y_list)):
if first_time:
x_list = x_list[3:]
first_time=False
y_list[num]=y_list[num][3:]
N = float(len(x_list))
sx,sy,sxx,syy,sxy=0,0,0,0,0
for i in range(0,int(N)):
sx += x_list[i]
sy += y_list[num][i]
sxx += x_list[i]*x_list[i]
syy += y_list[num][i]*y_list[num][i]
sxy += x_list[i]*y_list[num][i]
a = (sy*sx/N -sxy)/( sx*sx/N -sxx)
b = (sy - a*sx)/N
r = abs(sy*sx/N-sxy)/math.sqrt((sxx-sx*sx/N)*(syy-sy*sy/N))
#return a,b,r
r_list.append(r)
print(" y = %10.8f x + %10.8f , r=%10.8f" % (a,b,r) )
# plt.errorbar(x, y, fmt="bo:", yerr=0.2, xerr=0.02)
print("print:{}".format(num))
y_list_2=[]
for count,data in enumerate(y_list[num]):
if count == 0:
y_list_2.append(0)
else:
y_list_2.append(y_list_2[count-1]+y_list[num][count]-y_list[num][count-1])
print(len(y_list_2))
print(len(x_list))
plt.errorbar(x_list,y_list_2, yerr=err_list[num][3:], xerr=0.2,elinewidth=3,ms=2,mfc='wheat',mec='salmon',capsize=3,label=title_list[num])
#plt.errorbar(x,y, fmt="bo-", yerr=err, xerr=0.2,ecolor='hotpink',elinewidth=3,ms=2,mfc='wheat',mec='salmon',capsize=3)
#err_list[num][3:] fmt="bo-",,ecolor='hotpink'
#plt.bar(x,y, yerr = SD, error_kw = {'ecolor' : '0.2', 'capsize' :6}, alpha=0.7, label = 'First')
#plt.plot([0,160],[b,a*160+b],"blue",label='最小二乘法拟合')
#plt.scatter(water_level,putong_2000,color="red",label='平均结果')
# #plt.plot(x1, y1, "blue",label='最小二乘法拟合')
# plt.legend()#绘制图例
# # title2 = title+r"斜率拟合结果"
plt.title(title)
plt.legend()
plt.xlabel(xlabel)
plt.ylabel(ylabel)
plt.show()
# print()
# print(r_list)
plt.figure(dpi=100)
plt.plot([0,50,180,300,500,1000,2000],r_list)
plt.title(title)
#plt.legend()
plt.show()
def get_line2(x_list,y_list,err_list,title_list,title,xlabel,ylabel):
plt.figure(dpi=200)
r_list=[]
first_time=True
for num in range(len(y_list)):
N = float(len(x_list))
sx,sy,sxx,syy,sxy=0,0,0,0,0
for i in range(0,int(N)):
sx += x_list[i]
sy += y_list[num][i]
sxx += x_list[i]*x_list[i]
syy += y_list[num][i]*y_list[num][i]
sxy += x_list[i]*y_list[num][i]
a = (sy*sx/N -sxy)/( sx*sx/N -sxx)
b = (sy - a*sx)/N
r = abs(sy*sx/N-sxy)/math.sqrt((sxx-sx*sx/N)*(syy-sy*sy/N))
#return a,b,r
r_list.append(r)
print(" y = %10.8f x + %10.8f , r=%10.8f" % (a,b,r) )
# plt.errorbar(x, y, fmt="bo:", yerr=0.2, xerr=0.02)
print("print:{}".format(num))
y_list_2=[]
for count,data in enumerate(y_list[num]):
if count == 0:
y_list_2.append(0)
else:
y_list_2.append(y_list_2[count-1]+y_list[num][count]-y_list[num][count-1])
print(len(y_list_2))
print(len(x_list))
plt.errorbar(x_list,y_list_2, yerr=err_list[num], xerr=0.2,elinewidth=3,ms=2,mfc='wheat',mec='salmon',capsize=3,label=title_list[num])
#plt.errorbar(x,y, fmt="bo-", yerr=err, xerr=0.2,ecolor='hotpink',elinewidth=3,ms=2,mfc='wheat',mec='salmon',capsize=3)
#err_list[num][3:] fmt="bo-",,ecolor='hotpink'
#plt.bar(x,y, yerr = SD, error_kw = {'ecolor' : '0.2', 'capsize' :6}, alpha=0.7, label = 'First')
#plt.plot([0,160],[b,a*160+b],"blue",label='最小二乘法拟合')
#plt.scatter(water_level,putong_2000,color="red",label='平均结果')
# #plt.plot(x1, y1, "blue",label='最小二乘法拟合')
# plt.legend()#绘制图例
# # title2 = title+r"斜率拟合结果"
plt.title(title)
plt.legend()
plt.xlabel(xlabel)
plt.ylabel(ylabel)
plt.show()
# print()
# print(r_list)
plt.figure(dpi=100)
plt.plot([0,50,180,300,500,1000,2000],r_list)
plt.title(title)
#plt.legend()
plt.show()
NUAAZS

浙公网安备 33010602011771号