Python绘制XRD图谱和对应pdf卡片堆叠图

时间:2024-11-17 07:32:24
# -*- coding: utf-8 -*- """ Created on Mon Dec 7 16:33:39 2020 @author: fya """ import numpy as np import pandas as pd import matplotlib.pyplot as plt x0value=locals() xvalue=locals() y0value=locals() yvalue=locals() for i in range(1,4): x0value['x'+str(i)]=pd.read_csv('F:/XRD总.csv',header=None,usecols=[2*i-2]) #x1-x3是三组横坐标,横坐标在第 1,3,5列 xvalue['x'+str(i)]=np.array(x0value['x'+str(i)]) y0value['y'+str(i)]=pd.read_csv('F:/XRD总.csv',header=None,usecols=[2*i-1]) #y1-y3是三组纵坐标,纵坐标在第 2,4,6列 yvalue['y'+str(i)]=np.array(y0value['y'+str(i)]) #绘图 fig=plt.figure(figsize=(5.36,4.1025),dpi=600) #画一个图层 #XRD画在最大的图层中,卡片从最下面依次堆叠 axes = fig.add_axes([0.1, 0.1, 0.8, 0.8],facecolor='none') # left, bottom, width, height (range 0 to 1),大图,放XRD谱图 axes1 = fig.add_axes([0.1, 0.3, 0.8, 0.2],facecolor='none') #卡片1,上 axes2 = fig.add_axes([0.1, 0.1, 0.8, 0.2],facecolor='none') #卡片2,下,facecolor设为none,图层透明,防止上面的图层覆盖下面的 markerline, stemlines, baseline=axes2.stem(x3,y3, markerfmt=' ', basefmt = '-', use_line_collection=True) plt.setp(stemlines, linewidth=2, color='dimgray') #最下面,用stem函数画茎图,y坐标向x垂线 markerline, stemlines, baseline=axes1.stem(x2,y2, markerfmt=' ', basefmt = '-', use_line_collection=True) plt.setp(stemlines, linewidth=2, color='#ff9b93') #卡片1 plot=axes.plot(x1, y1,'-', color='#2d6187',linewidth=1.5) #XRD谱图 #各subplot分别设置 plt.sca(axes2) plt.xlim(10,90) #最下图坐标范围 plt.ylim(0,100) plt.yticks([]) plt.xticks([]) #(0, 10, 90,colors = "dimgrey") frame = plt.gca() #读取当前图层 frame.spines['top'].set_visible(False) #上框线不显示 frame.spines['bottom'].set_visible(False) plt.text(63,35,'XXXXXXX',fontdict={'family' : 'Arial', 'size' : 10}) #pdf卡片号,添加文本即可,(63,35)为文本开始的横纵坐标(按照当前图层的x y) plt.sca(axes) #大图 plt.xlim(10,90) plt.ylim(-400,1500) #可根据自己的图形自行调整,y的范围会影响谱图出现的位置,多试试找到最佳位置 plt.ylabel('Intensity (.)',fontdict={'family' : 'Arial', 'size' : 20}) plt.xticks(fontproperties = 'Arial', size = 16) #X轴 字体设置 plt.xlabel('2 Theta (degree)', fontdict={'family' : 'Arial', 'size' : 20}) #X label 字体设置 plt.yticks([]) frame = plt.gca() frame.spines['bottom'].set_visible(True) plt.sca(axes1) #中间图设置 plt.xlim(10,90) #中间坐标范围 plt.xticks([]) #只要图形,其他的如各种轴线,坐标,一概不要 plt.yticks([]) plt.hlines(0, 10, 90,colors = "#ff9b93") #y=0的水平横线,括号第一个数字为y,第二和第三个数字为x的起始点 frame = plt.gca() frame.spines['bottom'].set_visible(False) frame.spines['top'].set_visible(False) plt.text(63,25,'JCPDS No. XXXX',fontdict={'family' : 'Arial', 'size' : 10}) #pdf卡片号,添加文本即可 plt.show() fig.savefig('',dpi=600,format='tif',bbox_inches = 'tight') #bbox_inches 为tight时,可以确保输出图片完整 print('Done!')