Interface760e

无意中看到以下链接,深受启发,于是对程序进行了整改。

https://zhuanlan.zhihu.com/p/86978143   //PS: 厉害厉害,膜拜膜拜,学习学习

https://www.cnblogs.com/hhh5460/p/5189843.html

令附测试数据示例:

https://download.csdn.net/download/you_us/13611742

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Author: Liye Z
#Date:2019.08.18   14:30
import tkinter as tk
from tkinter.filedialog import askopenfilename
import fileinput
import matplotlib.pylab as plt
from itertools import islice
import sys
import matplotlib as mpl
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import Qt
from matplotlib.figure import Figure
import numpy as np
import sys
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar
#https://www.cnblogs.com/hhh5460/p/5189843.html
#https://zhuanlan.zhihu.com/p/86978143
data_file_name= askopenfilename(title='Select a data', filetypes=[('TXT', '*.txt')],
                                initialdir='D:\\')
data_file_path=data_file_name[0:data_file_name.rfind('/', 1) + 1];
new_dat= data_file_path + '/data.dat'
data = []
#打开txt,读取数据
with open(data_file_name) as txtfile:
    line = txtfile.readlines()
    for i, rows in enumerate(line):
        if i in range(28, len(line) - 1):  # 指定数据行:28行--到最后一行
            data.append(rows)
print("length", len(data))
txtfile.close()
E = np.zeros(len(data))
I = np.zeros(len(data))
E1 = np.zeros(len(data))
I1 = np.zeros(len(data))
E2 = np.zeros(len(data))
I2 = np.zeros(len(data))
j = 0
#打开dat,导出数据,可用于Origin作图
with open(new_dat, "w", ) as f:
    for i in range((len(data))):
        f.writelines(data[i])
        [variable1, variable2] = data[i].split(',', 1)
        E[i] = float(variable1)
        I[i] = float(variable2)
f.close()
# Reference   http://www.360doc.com/content/19/0828/10/47812380_857519286.shtml
# Say thanks to the author of the docment.
# Calculate ECSA
# fig.suptitle('Hupd')  # 添加标题以便我们辨别
# 在0.2- 0.4V vs SCE 之间寻找电双层,经验值
for i in range((len(data))):
    if (E[i] < 0.4) & (E[i] > 0.2) & (I[i] > 0):
        E2[j] = E[i]
        I2[j] = I[i]
        j = j + 1
i0 = max(I2);
#以电双层中最大电流值作为氢区电流背景扣除。
#选出氢区数据范围,经验值: 电势小于0.4, 电流大于0,也就是左上角区域。
for i in range((len(data))):
    if (E[i] < 0.4) & (I[i] > 0):
        E1[j] = E[i]
        I1[j] = I[i]
        j = j + 1
#扣除电双层电流,得到Hupd净电流
I10 = I1 - i0;  # 原始单位未变换,为 安培/A
#因测量误差等,扣除氢区最大电流值后,可能出现负值(非常接近0), 于是将所有负值归0.
for i in range((len(data))):
    if (I10[i] < 0):
        I10[i] = 0
# 消除坏点
I10[0] = 0;  # 消除初始坏点
QI0 = sum(I10) * 1 / 50;
# 求峰面积,Q = ΣI(t)dt, 数据间隔1mV,即dE=1mV,扫速为50mv/s,则 dt=1/50=0.02s,Q单位为库伦,
#I(t)为chi760e原始数据,单位一般是A。
QI0 = QI0 * 1000;  # 单位转化为 毫库伦/mC
area = QI0 / 0.21;  # 单位为 cm2
str = "surface of Hupd is %f" % (area)
print(str)





class QmyMainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)  # 调用父类构造函数
        self.setWindowTitle("Interface760e")
        ## rcParams[]参数设置,以正确显示汉字
        mpl.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei']  # 汉字字体
        mpl.rcParams['font.size'] = 12  # 字体大小
        mpl.rcParams['axes.unicode_minus'] = False  # 正常显示负号
        self.__iniFigure()  # 创建绘图系统,初始化窗口
        self.__drawFigure()  # 绘图
    # 创建绘图系统,初始化窗口

    def __iniFigure(self):
        self.__fig=mpl.figure.Figure(figsize=(8,5))#单位英寸
        self.__fig.suptitle("Interface760e")#总的图标题
        figCanvas = FigureCanvas(self.__fig) #创建FigureCanvas对象
        naviToolbar = NavigationToolbar(figCanvas,self)#创建工具栏
        naviToolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
        self.addToolBar(naviToolbar)#添加工具栏到主窗口
        self.setCentralWidget(figCanvas)
    #绘图

    def __drawFigure(self):
        #t = np.linspace(0, 10, 40)
        #y1 = np.sin(t)
        #y2 = np.cos(2 * t)

        ax1 = self.__fig.add_subplot(1, 2, 1)  # matplotlib.axes.Axes 类
        ax1.plot(E, I, 'r-o', label="raw data", linewidth=1, markersize=1)
        ax1.set_xlabel('Potential(V) vs SCE')  # x轴标题
        ax1.set_ylabel('Current(A) ', fontsize=14)  # y轴标题
        ax1.set_xlim([min(E)-0.1, max(E)+0.1])
        ax1.set_ylim([min(I)-0.0002, max(I)+0.0002])
        ax1.set_title("Raw data plot")  # 子图标题
        ax1.legend()  # 自动创建图例
        print(max(E))
        print(max(I))
        ax2 = self.__fig.add_subplot(1, 2, 2)  # matplotlib.axes.Axes 类
        ax2.plot(E1, I1, 'r-o', label="new data", linewidth=1, markersize=1)
        ax2.set_xlabel('Potential(V) vs SCE')  # x轴标题
        ax2.set_ylabel('Current(A) ', fontsize=14)  # y轴标题
        ax2.set_xlim(min(E)-0.1, max(E)+0.1)
        ax2.set_ylim([min(I)-0.0002, max(I)+0.0002])
        ax2.set_title("Select H region")  # 子图标题
        ax2.legend()  # 自动创建图例


if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = QmyMainWindow()
    form.show()
    sys.exit(app.exec_())

猜你喜欢

转载自blog.csdn.net/you_us/article/details/111030113
今日推荐