Python进行fullprof精修后数据绘图
写了一个小脚本来进行xrd图谱绘图,省下origin的重复劳动,但一些具体的图可能还是需要origin。也借着这个小脚本重新学习一下许久未用的Python。
这个脚本只写了存在最多三个相的情况,基本够日常使用
fullprof 导出数据的格式通常为 .xyn, 使用origin时,通常的数据预处理方式是去掉前两行的!号,去除brag峰位那一列的000000000000。
这个脚本同样需要去除000000000000的预处理(但毫无疑问这是可以进一步更新的)
优点:画图快
缺点:无法写出物相的名称(仅从.xyn文件无法得到该信息),legend的设置不是很方便。
这个脚本只适合进行组会汇报,和老师交流讨论等场合。
import matplotlib.pyplot as plt
import tkinter as tk # 图形化界面设计模块
from tkinter import filedialogf_path = filedialog.askopenfilename()
with open(f_path,'r') as f:data = f.readlines()
data.pop(0) #
data.pop(0) #文件前两行为无用表头,去除文件中的前两行
list1 = [] #list1中储存所有数据 n*m 的列表
for i in data:list1.append([float(x) for x in i.split()])
two_Theta = list() # 2Theta 横坐标
int_obs = list() # 实验测量值,散点图,圆形,红色
int_cal = list() # 拟合值,折线图,黑色
obs_cal = list() # 拟合差值,蓝色
tol_brag_list = list() # brag峰的位置,目前尚未分开多个相
position_list = list() # brag峰竖棍的纵坐标for i in range(len(list1)):two_Theta.append(list1[i][0])int_obs.append(list1[i][1])int_cal.append(list1[i][3])obs_cal.append(list1[i][5])if len(list1[i]) == 8:tol_brag_list.append(list1[i][6])position_list.append(list1[i][7])position_set = set(position_list) # 用set对list去重
Nph = len(position_set) # 去重后的set的长度就是相的个数Nph
position_relist = list(position_set)brag_list = list()
posi_list = list()
for i in range(Nph):#这里写的好蠢哦,或许有更好的写法brag_list.append([])posi_list.append([])
for i in range(Nph):position = position_relist[i]for j in range(len(position_list)):if position_list[j] == position:brag_list[i].append(tol_brag_list[j])posi_list[i].append(position_list[j])#接下来画图
#设置坐标轴刻度朝内,这两行代码放在靠上的位置
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'plt.figure(figsize = (12.5,7.5))#确定绘图的大小,这里的尺寸为英寸,1英寸为100像素点plt.scatter(two_Theta,int_obs,marker = 'o',c = ('w'),edgecolor = 'r',s=20)
plt.plot(two_Theta,int_cal,color = 'k')
plt.plot(two_Theta,obs_cal,color = 'b')
#brag峰位的画法
for i in range(Nph):if i == 0:plt.scatter(brag_list[i],posi_list[i],color = 'g',marker = '|',s = 50,linewidths = 0.5)elif i == 1:plt.scatter(brag_list[i],posi_list[i],color = 'orange',marker = '|',s = 50,linewidths = 0.5)elif i == 2:plt.scatter(brag_list[i],posi_list[i],color = 'purple',marker = '|',s = 50,linewidths = 0.5)
# font是标签属性:包括字体,大小等
font = {'family':'Times New Roman','weight':'30','size':'18'}#weight指什么?
plt.xlabel('2θ(°)',font,labelpad = 2)#labelpad 来控制坐标轴标签和坐标轴之间的距离
plt.ylabel('Intensity(counts)',font, labelpad = -5)x_min = list1[0][0]
x_max = list1[-1][0]
plt.xlim([x_min,x_max])y_min = min(min(int_obs),min(int_cal))
y_max = max(max(int_obs),max(int_cal))plt.show()
绘出来的图如下所示

对于matplotlib绘图中的一些常用设置如下
import matplotlib.pyplot as plt
plt.rcParams['xtick.direction'] = 'in'#调整刻度向内
plt.rcParams['ytick.direction'] = 'in'#调整刻度向内
plt.figure(figsize = (12.5,7.5))#确定绘图的尺寸
plt.plot()#绘制折线图
plt.scatter()#绘制散点图
plt.xlim(x_min,x_max)
plt.ylim(y_min,y_max)#调整x,y轴的刻度,在xrd绘图中,python对y轴范围的自动调整还不错,x轴建议根据2Theta的数据点进行调整
plt.xlabel()#x轴标签
plt.ylabel()#y轴标签
#标签中可能会有特殊字符,使用\Theta不太行,从word中拷贝过来即可,这里或许也可以学习一下python中特殊字符的输入方法
对于散点图和折线图中图线形式的改变方法
#散点图
plt.scatter(x,y,marker ='',c = '',edgecolor = '',s = )
#常用marker ‘o’,‘+’,‘|’,‘.’,‘-’,‘.-’
#c = color,edgecolor是点符边缘颜色
#常用颜色 black = 'k',white = 'w',red = 'r',green = 'g',yellow = 'y'
#s = size,改变符号大小
#对于竖棍装的符号,需要用 size 和 linewidths 来同时控制其尺寸,达到合适的效果
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
