1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| import numpy as np import matplotlib.pyplot as plt from monty.serialization import loadfn import string from mpl_toolkits.axes_grid1.inset_locator import inset_axes from matplotlib.ticker import FormatStrFormatter from PIL import Image from matplotlib.gridspec import GridSpec
def float_range(start,stop,step): return [start+i*step for i in range(int((stop-start)//step))]
#fig = plt.figure() font = {'family': 'Times New Roman', 'size': 14, 'weight':'bold'} plt.rc('font', **font)
cm = plt.cm.get_cmap('RdYlBu') # C N E NES=np.array([[ 12, 6, -156.36123303,60.1242], [ 3 , 4 ,-58.74306942,19.8460], [ 2 , 4 , -48.08202932,10.9879]])
C=NES[:,0]; print(C) N=NES[:,1]; print(N) En=NES[:,2]; S=NES[:,3]; print('En=') print(En) print('S=') print(S)
grap=-9.22704312 nitro=-8.31684201 step=0.005 un=np.array(float_range(nitro,-4.3,step)) uc=np.array(float_range(grap-1,-7.3,step))
#change phosphorus potentail color=['r','g','b','c','m','y','k'];
fig = plt.figure(figsize=(18,5)) gs = GridSpec(1, 3, width_ratios=[1,1,1], wspace=0.32)#, hspace=0.2) ax1 = plt.subplot(gs[0,0])
for k in range(len(N)): dE=(En[k]-C[k]*grap-N[k]*un)/(S[k]); ax1.plot(un,dE,c=color[k],lw=2)
lg=[r'$C_2N$',r'g-$C_3N_4$',r'penta-$CN_2$'] font = {'family': 'Times New Roman', 'size': 14} ax1.legend(lg,prop=font) #ax1.set_title('Stability of C_mN_n under different nitrogen chemical potential') ax1.set_xlabel(r'$\mu_{N}$(eV)') ax1.set_ylabel(r'Gribbs Free Energy (eV/$\AA$)')
ax2 = plt.subplot(gs[0,1]) for k in range(len(C)): dE=(En[k]-C[k]*uc-N[k]*nitro)/(S[k]); ax2.plot(uc,dE,c=color[k],lw=2) # ax2.legend(lg,prop=font) #,fontsize=16) #ax2.set_title('Stability of C_mN_n under different carbon chemical potential') ax2.set_xlabel(r'$\mu_{C}$(eV)') ax2.set_ylabel(r'Gibbs Free Energy (eV/$\AA$)') #%upc=meshgrid(up,uc); ChemPot=np.zeros((len(un)*len(uc),2)); print(ChemPot.shape) count=0; print(len(un)) print(len(uc)) for m in range(len(un)): for n in range(len(uc)): ChemPot[count,:]=[un[m],uc[n]]; count=count+1; print(count) #icount=0; print(C.shape) print(N.shape) print(En.shape) #CPEn=[C,N,En]; #disp(CPEn); my=np.zeros((469755,3)); icount=0 for s in range(count): k=0; dE1=(En[k]-C[k]*ChemPot[s,1]-N[k]*ChemPot[s,0])/(S[k]); k=1; dE2=(En[k]-C[k]*ChemPot[s,1]-N[k]*ChemPot[s,0])/(S[k]); k=2; dE3=(En[k]-C[k]*ChemPot[s,1]-N[k]*ChemPot[s,0])/(S[k]); if ( ( dE3 <= dE1) and ( dE3 <= dE2) and (dE3 <= dE1)) : my[icount,:]=[ChemPot[s,0],ChemPot[s,1],dE3]; icount=icount+1; ax3 = plt.subplot(gs[0,2]) my=my[0:icount,:]; #icount #figure() skip=10 sc=ax3.scatter(my[:,0][0::skip],my[:,1][0::skip],c= my[:,2][0::skip],cmap=cm,marker='.') ax3.set_xlabel(r'$\mu_{N}$(eV)'); ax3.set_ylabel(r'$\mu_{C}$(eV)') ax3.set_xlim([-7.7,-4.0]) ax3.set_ylim([-10.5,-7.0]) ax3.set_yticks(float_range(-10.5,-6.5,0.5)) ax3.set_xticks(float_range(-7.5,-3.0,1.5)) plt.colorbar(sc)
yloc=-0.15 xloc=0.22 #ax1.text(xloc, yloc, '('+string.ascii_lowercase[0]+')', transform=ax1.transAxes,size=20, weight='bold') #ax2.text(xloc, yloc, '('+string.ascii_lowercase[1]+')', transform=ax2.transAxes,size=20, weight='bold') #ax3.text(xloc, yloc, '('+string.ascii_lowercase[2]+')', transform=ax3.transAxes,size=20, weight='bold')
ax3.scatter(-7.22,-7.78,s=60,marker='*',c='r') plt.tight_layout() plt.subplots_adjust(bottom=0.15) plt.show()
#plt.savefig('FigS2N.jpg',format='jpg',dpi=300) #plt.savefig('FigS2N.pdf',format='pdf',dpi=300)
|