import matplotlib.pyplot as plt
def read_file(filename):
"""
@参数 filename:带路径的文件名,字符串
接收文件名为参数,读取文件中的数据转为值是浮点数的二维列表,原文件的两列数据分别作为横、纵坐标数据。
返回列表。
"""
list = []
with open(filename, 'r', encoding='utf-8') as infile:
for line in infile:
set = line.strip().split('\t')
list.append(set[0])
list.append(set[1])
list1 = list[2:]
return list1
def plot_xrd_a(data_list):
"""
@参数 data_list:读文件获得的数据列表,列表类型
接收一个列表为参数,列表的元素为包含x和y数据的列表
绘制图a。
"""
lsx = []
lsy = []
for i in range(0, data_list.__len__() - 1, 2):
lsx.append(float(data_list[i]))
lsy.append(float(data_list[i + 1]))
plt.plot(lsx, lsy, linestyle='-', color='blue', linewidth=1)
plt.show()
def plot_xrd_b(data_list):
"""
@参数 data_list:读文件获得的数据列表,列表类型
接收一个列表为参数,列表的元素为包含x和y数据的列表。
绘制图b。
"""
lsx = []
lsy = []
for i in range(0, data_list.__len__() - 1, 2):
lsx.append(float(data_list[i]))
lsy.append(float(data_list[i + 1]))
plt.plot(lsx, lsy, linestyle='-', color='red', linewidth=1)
plt.axvline(0, linestyle='--', color='blue', linewidth=1)
plt.axhline(0, linestyle='--', color='red', linewidth=1)
plt.xlabel(u'2d')#添加横轴注释
plt.ylabel(u'intensity')#添加纵轴注释
plt.show()
def top_five_peak(data_list):
"""
@参数 data_list:读文件获得的数据列表,列表类型
接收数据列表为参数,返回纵坐标值最大的5个峰的坐标的列表,降序排序。
"""
lsy = []
lsx = []
s1 = []
for i in range(0, data_list.__len__() - 1, 2):
lsx.append(float(data_list[i]))
lsy.append(float(data_list[i + 1]))
s = list(zip(lsx, lsy))#将两列表拼接成[(),()]的形式
s.sort(key=lambda x: x[1], reverse=True)
for i in range(5):
s1.append(s[i])
return s1
def mark_peak(sort_of_ls):
"""
@参数 sort_of_ls:排序后的数据列表,列表类型
接收排序的数据,在指定的坐标点加注释。注释标记点相对横坐标偏移+30,纵坐标等高,
注释文本为峰高,即y 值。
"""
s = sort_of_ls
for i in range(s.__len__()):
plt.annotate(s[i][1],
xy = (s[i][0],s[i][1]),#x和y的坐标
xytext = (s[i][0]+3, s[i][1]+0),#写注释的位置
arrowprops = dict(arrowstyle='->'))#使用箭头
def plot_xrd_c(data_list, sort_of_ls):
"""
@参数 data_list:读文件获得的数据列表,列表类型
@参数 sort_of_ls:排序后的数据列表,列表类型
接收一个元组为参数,元组的元素为包含x和y数据的列表
绘制图c。
"""
lsx = []
lsy = []
for i in range(0, data_list.__len__() - 1, 2):
lsx.append(float(data_list[i]))
lsy.append(float(data_list[i + 1]))
plt.plot(lsx, lsy, linestyle='-', color='red', linewidth=1)
plt.axvline(0, linestyle='--', color='blue', linewidth=1)
plt.axhline(0, linestyle='--', color='red', linewidth=1)
plt.xlabel(u'2d')
plt.ylabel(u'intensity')
mark_peak(sort_of_ls)
plt.show()
def plot_xrd_d(data_list, sort_of_ls):
"""
@参数 data_list:读文件获得的数据列表,列表类型
@参数 sort_of_ls:排序后的数据列表,列表类型
接收一个元组为参数,元组的元素为包含x和y数据的列表
绘制图d。
"""
plt.subplot(211)
lsx = []
lsy = []
for i in range(0, data_list.__len__() - 1, 2):
if float(data_list[i]) >= 5.0 and float(data_list[i]) <= 25.0:
lsx.append(float(data_list[i]))
lsy.append(float(data_list[i + 1]))
plt.plot(lsx, lsy, linestyle='-', color='red', linewidth=1)
# plt.axvline(0, linestyle='--', color='blue', linewidth=1)
plt.axhline(0, linestyle='--', color='red', linewidth=1)
plt.xlabel(u'2d')
plt.ylabel(u'intensity')
mark_peak(sort_of_ls)
plt.subplot(2, 2, 3)
lsx = []
lsy = []
for i in range(0, data_list.__len__() - 1, 2):
if float(data_list[i]) >=6.7 and float(data_list[i]) <=7.0:
lsx.append(float(data_list[i]))
lsy.append(float(data_list[i+1]))
plt.plot(lsx, lsy, linestyle='-', color='blue', linewidth=1)
plt.subplot(2, 2, 4)
lsx = []
lsy = []
for i in range(0, data_list.__len__() - 1, 2):
if float(data_list[i]) >= 9.5 and float(data_list[i]) <= 10.0:
lsx.append(float(data_list[i]))
lsy.append(float(data_list[i + 1]))
plt.ylim(0,10000)
plt.plot(lsx, lsy, linestyle='-', color='blue', linewidth=1)
plt.show()
if __name__ == '__main__':
file = 'XRD.txt' # 带路径文件名
file_to_list = read_file(file)
# 下面的4个图一个一个生成,不要同时生成
# plot_xrd_a(file_to_list) # 生成图a
plot_xrd_b(file_to_list) # 生成图b
top_peak = top_five_peak(file_to_list) # 生成图c和图d要先取消改行代码的注释
# plot_xrd_c(file_to_list, top_peak) # 生成图c
#plot_xrd_d(file_to_list, top_peak) # 生成图d
图像a
图像b
图像c
图像d
import matplotlib.pyplot as plt
def read_file(filename):
"""
@参数 filename:带路径的文件名,字符串
接收文件名为参数,读取文件中的数据转为值是浮点数的二维列表,原文件的两列数据分别作为横、纵坐标数据。
返回列表。
"""
# 代码区
def plot_xrd_a(data_list):
"""
@参数 data_list:读文件获得的数据列表,列表类型
接收一个列表为参数,列表的元素为包含x和y数据的列表
绘制图a。
"""
# 代码区
def plot_xrd_b(data_list):
"""
@参数 data_list:读文件获得的数据列表,列表类型
接收一个列表为参数,列表的元素为包含x和y数据的列表。
绘制图b。
"""
# 代码区
def top_five_peak(data_list):
"""
@参数 data_list:读文件获得的数据列表,列表类型
接收数据列表为参数,返回纵坐标值最大的5个峰的坐标的列表,降序排序。
"""
# 代码区
def mark_peak(sort_of_ls):
"""
@参数 sort_of_ls:排序后的数据列表,列表类型
接收排序的数据,在指定的坐标点加注释。注释标记点相对横坐标偏移+30,纵坐标等高,
注释文本为峰高,即y 值。
"""
# 代码区
def plot_xrd_c(data_list, sort_of_ls):
"""
@参数 data_list:读文件获得的数据列表,列表类型
@参数 sort_of_ls:排序后的数据列表,列表类型
接收一个元组为参数,元组的元素为包含x和y数据的列表
绘制图c。
"""
# 代码区
def plot_xrd_d(data_list, sort_of_ls):
"""
@参数 data_list:读文件获得的数据列表,列表类型
@参数 sort_of_ls:排序后的数据列表,列表类型
接收一个元组为参数,元组的元素为包含x和y数据的列表
绘制图d。
"""
# 代码区
if __name__ == '__main__':
file = 'data/XRD_AFO.txt' # 带路径文件名
file_to_list = read_file(file)
# 下面的4个图一个一个生成,不要同时生成
plot_xrd_a(file_to_list) # 生成图a
# plot_xrd_b(file_to_list) # 生成图b
# top_peak = top_five_peak(file_to_list) # 生成图c和图d要先取消改行代码的注释
# plot_xrd_c(file_to_list, top_peak) # 生成图c
# plot_xrd_d(file_to_list, top_peak) # 生成图d