OPA电压输出曲线批量处理

数据特点:第二列是纵坐标,第四列是横坐标

代码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("运行结束")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值