数据特点:第二列是纵坐标,第四列是横坐标
代码1:重复绘制同一个器件的不同曲线
import numpy as np
import matplotlib.pyplot as plt
import os
import glob
import math
from scipy import optimize
from scipy.signal import savgol_filter
import pandas as pd
from decimal import *
import math
import openpyxl
import seaborn as sns
from numpy import polyfit,poly1d
import libraries
import time
import matplotlib
matplotlib.use('Agg')
# 设置西文字体为新罗马字体
from matplotlib import rcParams
config = {
"font.family":'Times New Roman', # 设置字体类型
"axes.unicode_minus": False #解决负号无法显示的问题
}
rcParams.update(config)
starttime=time.time()
#查看库的位置
# import sys
# print(f"Python 解释器路径: {sys.executable}")
# print("Python 模块搜索路径:")
# for path in sys.path:
# print(path)
#字体
font_dict1 = {'family': 'Times New Roman', 'weight': 'normal', 'size': 16}
font_dict2 = {'family': 'Times New Roman', 'weight': 'normal', 'size': 14}
#创建一个存放图的文件夹
path0=os.getcwd() #获取当前文件的路径
path1=path0+'\\26B\\' #存放数据的文件路径
figurefile = path0 + '\\26B-输出特性-figure\\'#想要新建的文件夹
if os.path.exists(figurefile): #新建文件夹的脚本
pass
else:
os.makedirs(figurefile)
#循环读取.csv文件名称
filenames = libraries.search1(path=path1, name='opa-3port#33B-10-')
print('filenames', filenames) # filenames ['opa-3port#112', 'opa-3port#112', 'opa-3port#162', 'opa-3port#162',
print('filenames文件的个数', len(filenames)) # filenames文件的个数 10
# 数据文件的命名列表
file_names = filenames
# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300
# 创建一个空的DataFrame来存储所有数据
all_data = pd.DataFrame()
# 创建一个图形
plt.figure()
# 循环读取每个文件
for file_name in file_names:
# 构建完整的文件路径
# file_path = f'{file_name}.csv' #必须在指定路径(文件夹+文件名)下读取.csv数据文件
file_path = f'{path1}\\{file_name}.csv'
print('file_path=', file_path)
# 读取 CSV 文件
df = pd.read_csv(file_path)
print("df", df)
# 提取第4列作为横坐标,第2列作为纵坐标,并取前89个数据点
x_ = df.iloc[:89, 3] # 第4列,索引为3
x1 = x_.astype(float) #将值从object类型转换为浮点型,否则作图会有影响
print("横坐标",x_,"横坐标的个数",len(x_))
y_ = df.iloc[:89, 1] # 第2列,索引为1
y1 = y_.astype(float)
print('y1', y1)
# 将数据添加到汇总表格中
temp_df = pd.DataFrame({f'{file_name}_X': x1, f'{file_name}_Y': y1})
all_data = pd.concat([all_data, temp_df], axis=1)
# 绘制数据
plt.plot(x1, y1, label=file_name[9:18])# file_name[9:16]对应保存图片的legend
chip_number = 'T25011301 33B #10' #记得修改
# 设置图形标题、坐标轴标签和图例
plt.title(f'{chip_number} OPA Voltage Output Curve')
plt.xlabel('Vin+ Voltage/V')
plt.ylabel('Out Voltage/V')
plt.legend()
# 设置保存图形的文件名
fig_name = f'{chip_number}.png'
# 组合成完整的文件路径
full_path = f'{figurefile}/{fig_name}'
# 保存图形到指定文件夹
plt.savefig(full_path)
# 关闭图形以释放资源
plt.close()
# 保存数据到 Excel 文件,文件与图片在同一文件夹下
data_file_name = f'{chip_number}_data.xlsx'
data_full_path = f'{figurefile}/{data_file_name}'
all_data.to_excel(data_full_path, index=False)
print(f"数据已保存到 {data_full_path}")
endtime=time.time()
scripttime=endtime-starttime
print(scripttime)
print("运行结束")
代码2:批量处理不同器件的数据
import numpy as np
import matplotlib.pyplot as plt
import os
import glob
import math
from scipy import optimize
from scipy.signal import savgol_filter
import pandas as pd
from decimal import *
import math
import openpyxl
import seaborn as sns
from numpy import polyfit,poly1d
import libraries
import time
import matplotlib
matplotlib.use('Agg')
# 设置西文字体为新罗马字体
from matplotlib import rcParams
config = {
"font.family":'Times New Roman', # 设置字体类型
"axes.unicode_minus": False #解决负号无法显示的问题
}
rcParams.update(config)
starttime=time.time()
#查看库的位置
# import sys
# print(f"Python 解释器路径: {sys.executable}")
# print("Python 模块搜索路径:")
# for path in sys.path:
# print(path)
#字体
font_dict1 = {'family': 'Times New Roman', 'weight': 'normal', 'size': 16}
font_dict2 = {'family': 'Times New Roman', 'weight': 'normal', 'size': 14}
#创建一个存放图的文件夹
path0=os.getcwd() #获取当前文件的路径
path1=path0+'\\26B\\' #存放数据的文件路径
figurefile = path0 + '\\26B-输出特性-figure\\'#想要新建的文件夹
if os.path.exists(figurefile): #新建文件夹的脚本
pass
else:
os.makedirs(figurefile)
#循环读取.csv文件名称
filenames = libraries.search1(path=path1, name='opa-3port#26B-')
print('filenames', filenames) # filenames ['opa-3port#112', 'opa-3port#112', 'opa-3port#162', 'opa-3port#162',
print('filenames文件的个数', len(filenames)) # filenames文件的个数 10
# 数据文件的命名列表
file_names = filenames
# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300
# 定义纵坐标列索引和图例列索引
# y_cols = [2]数据对应的列数,但是实际索引的第1列要对应0
y_cols = [1]
data = []
# 循环处理每个文件
for file_name in file_names:
# 构建完整的文件路径
# file_path = f'{file_name}.csv' #必须在指定路径(文件夹+文件名)下读取.csv数据文件
file_path = f'{path1}\\{file_name}.csv'
print('file_path=',file_path)
# 读取 CSV 文件
df = pd.read_csv(file_path)
print("df",df)
# 提取横坐标数据,取前 600 个
x = df.iloc[:132, 3]
x1 = x.astype(float) #将值从object类型转换为浮点型,否则作图会有影响
print("横坐标",x,"横坐标的个数",len(x))
data.append(x1)
#提取纵坐标数据,取前100个
y1 = df.iloc[:132, y_cols[0]]
print("y1",y1,'y1的个数',len(y1))
y1_numeric = y1.astype(float)
print('y1_numeric', y1_numeric)
data.append(y1_numeric)
# 创建一个新的图形
plt.figure()
# legend_label = [legend1,legend2,legend3,legend4,legend5,legend6]
# 绘制折线图
# plt.plot(x1, y1_numeric,x1,y2_numeric,x1,y3_numeric,x1,y4_numeric,x1,y5_numeric,x1,y6_numeric)
plt.plot(x1, y1_numeric,label = file_name[10:16])
# 设置图形标题、坐标轴标签和图例
plt.title(f'{file_name[10:16]} 200K OPA Voltage Output Curve') #记得低温的时候添加温度
plt.xlabel('Vin+ Voltage/V')
plt.ylabel('Out Voltage/V')
plt.legend()
# 设置保存图形的文件名
fig_name = f'{file_name}_plot.png'
# 组合成完整的文件路径
full_path = f'{figurefile}/{file_name}'
# 保存图形到指定文件夹
plt.savefig(full_path)
# 关闭图形以释放资源
plt.close()
chip_number = 'T25011301 26B 200K' #记得修改芯片编号+温度T
# 整理数据为 DataFrame
data_dict = {}
for i, series in enumerate(data):
if i % 2 == 0:
data_dict[f'{file_names[i // 2]}_X'] = series
else:
data_dict[f'{file_names[(i - 1) // 2]}_Y'] = series
result_df = pd.DataFrame(data_dict)
# 保存为 CSV 文件
csv_file_path = os.path.join(figurefile, f'{chip_number}_汇总数据.csv')
result_df.to_csv(csv_file_path, index=False)
print(f'数据已汇总保存到 {csv_file_path}')
endtime=time.time()
scripttime=endtime-starttime
print(scripttime)
print("运行结束")