| 12
 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 npimport 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)
 
 |