添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Python绘制XPS分峰后的填充效果

专栏 / Python绘制XPS分峰后的填充效果

Python绘制XPS分峰后的填充效果

2020年11月27日 03:41 --浏览 · --喜欢 · 具怀逸兴
粉丝: 2350 文章: 3

之前的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
横坐标效果