之前的XPS分峰之后用origin的积分功能来进行填充,不过我的origin2015似乎没有这个功能,装了origin2018才可以进行填充。简单步骤就是选中一条线(此时线是independent的),在origin的快捷分析里有“积分”功能,点击后,会弹出一个对话框 (Fig. 1),在“积分”栏里勾选“关闭快捷分析工具后保持阴影颜色”。然后点击“基线” 功能(Fig. 2),模式为“使用现有数据集”,选择你的基线那一列数据。之后就是拉伸积分区域,确保所有区域都被覆盖到。此时关闭对话框,双击目前的灰色区域,在弹出的对话框中修改积分区域的颜色(默认灰色)。Fig. 1. 确保关闭后积分区域有颜色

Fig. 2. 选择基线


此方法虽然有效,然而对于很多origin版本不够的同学没那么友好,而且有些同学用的是非Windows系统,比如Linux系统,更是对画图带来诸多不便。因此,琢磨了一下用python的matplotlib来画这种图形。此方法应该不是最简便的方法,较为简单粗暴,hhhh。

代码如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Nov 26 21:53:15 2020
@author: fan
"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df0 = pd.read_csv('F:/xpstest.csv',header=None) #数据存在csv中,读取该csv文件
print(df0.head())
df_name = locals()
for i in range(1,11):                                  #本例有10组数据,实际情况根据需要进行修改。for语句最后有冒号 :
df_name['df'+str(i)] = pd.read_csv('F:/xpstest.csv',header=None,usecols=[i-1]) #csv默认第一列为column 0,df1需要对应column 0,因此usecols=[i-1]. 注意for循环后一句需要有缩进
print (df_name['df'+str(i)].head())  #验证一下是否创建好10个dataframe,可以mute.此行缩进,表示同样处于for循环
X0=np.array(df_name['df1'])  #dataframe转为一列array,下同
Y01=np.array(df_name['df2'])
Y02=np.array(df_name['df3'])
Y03=np.array(df_name['df4'])
Y04=np.array(df_name['df5'])
Y05=np.array(df_name['df6'])
Y06=np.array(df_name['df7'])
Y07=np.array(df_name['df8'])
Y08=np.array(df_name['df9'])
Y09=np.array(df_name['df10'])
X = X0[:,0]  #转置,下同
Y1 = Y01[:,0]
Y2 = Y02[:,0]
Y3 = Y03[:,0]
Y4 = Y04[:,0]
Y5 = Y05[:,0]
Y6 = Y06[:,0]
Y7 = Y07[:,0]
Y8 = Y08[:,0]
Y9 = Y09[:,0]
fig, ax = plt.subplots()
ax.invert_xaxis()
plt.xlim(808, 775) #set X range
ax.plot(X, Y1, X, Y8, X, Y9, color='dimgray',linewidth=0.5) #本例,Y1是原始xps值,Y8为基线,Y9为envelope,这些要画成line。实际运用要分清哪个Y值对应的是原始,基线和envelope
ax.plot(X, Y2, X, Y3, X, Y4, X, Y5, X, Y6, X, Y7, color='none',linewidth=0.5) #这些曲线下都要填充颜色,如果有线条会显得不够好看,所以单独画
ax.fill_between(X, Y2, Y8, facecolor='#9ad3bc',alpha=0.6) #填充颜色在Y2和Y8(基线)之间,下同。alpha为透明度,1为不透明,可根据需要调整
ax.fill_between(X, Y3, Y8, facecolor='red')
ax.fill_between(X, Y4, Y8, facecolor='lightcoral',alpha=0.6)
ax.fill_between(X, Y5, Y8, facecolor='cornflowerblue',alpha=0.6)
ax.fill_between(X, Y6, Y8, facecolor='#ffdd93',alpha=0.8)
ax.fill_between(X, Y7, Y8, facecolor='#ffa36c',alpha=0.6)
plt.xlabel('Binding energy (eV)', fontdict={'family' : 'Arial', 'size'   : 16}) #X label 字体设置
plt.ylabel('Counts (s)', fontdict={'family' : 'Arial', 'size'   : 16})  #Y label 字体设置
plt.xticks(fontproperties = 'Arial', size = 12) #X轴 字体设置
plt.yticks(fontproperties = 'Arial', size = 12) #Y轴 字体设置
plt.show()
fig.savefig('XPS-Co1.tif',dpi=600,format='tif') #保存图片,如需要矢量图可改为eps
fig.savefig('XPS-Co1.png',dpi=600,format='png') #保存图片,如需要矢量图可改为eps
print('done!')

画图结果(局部)原始值,基线,envelope有line color,填充区域只填充了颜色,去掉了line color

横坐标效果