记一个绘制态密度与能带的matlab脚本
程序员文章站
2022-05-16 18:14:59
...
题记
记一个能带与态密度绘制的脚本,用于处理p4VASP提取的数据后的数据(需要p4vasp的可以在我博客里找)
用法
能带数据需保存在名为band.dat的文件里
态密度数据保存在名为dos.dat的文件里
输入
脚本当中有些数据需要先手动输入(共3处)
比如排列方式
能带的xy轴的取值范围
能带大高对称点
%%%%%%%%%%%%%%%%%%%%能带%%%%%%%%%%%%%%%
dat= importdata('band.dat');%输入能带数据
x=dat(:,1);
y=dat(:,2);
[m,n]=size(x);
mun1=1;
subplot(1,2,1)%能带图的放置位置,这里1,2,1分别表示把图按1行2列的形式排列,其中这幅图排1的位置
hold on
for i=2:m
if x(i)== 0
plot(munx,muny,'k','linewidth',1)%绘制能带图默认颜色为黑色‘k’线的粗细为1
hold on
mun1=1;
x_long=x(i-1);
clear munx muny
i=i+1;
else
munx(mun1)=x(i);
muny(mun1)=y(i);
mun1=mun1+1;
i=i+1;
end
end
%%%%%%%%%%%%%%%%%%%%%输入%%%%%%%%%%%%%%%
kpoint_0=0 ; %第一条能带,这里需要手动输入高对称点的位置
kpoint_1=0 ; %第二条能带
kpoint_2=0 ; %第三调能带
kpoint_3=0 ; %第四条能带
kpoint_4=0 ; %第五条能带
x_end=0.25 ; %x轴的取值范围
y_statr=-2 ; %y轴的起始范围
y_end=3 ; %y轴的结束范围
set(gca,'XTick',[0,kpoint_1,kpoint_2,kpoint_3,kpoint_4],'linewidth',2)
set(gca,'XTickLabel',{'Γ','M','K','Γ'});%输入高对称点的名称以‘名称’形式输入
%%%%%%%%%%%%%%%%%%%%截止%%%%%%%%%%%%%%%
plot([kpoint_1,kpoint_1],[y_end,y_statr],'k','linewidth',0.5)
plot([kpoint_2,kpoint_2],[y_end,y_statr],'k','linewidth',0.5)
plot([kpoint_3,kpoint_3],[y_end,y_statr],'k','linewidth',0.5)
set(gca,'YTick',(y_statr:1:y_end),'linewidth',2)
axis([0,x_long,y_statr,y_end])
plot([0,x_long],[0,0],'--r','linewidth',1)
box off
plot([0,x_long],[y_end,y_end],'k','linewidth',2)
plot([x_long,x_long],[y_end,y_statr],'k','linewidth',2)
ylabel('Energy(Ev)','FontSize',16)
xlabel('Band','FontSize',16)
hold on
%a='以读取能带数据,并绘制能带图';
%%%%%%%%%%%%%%态密度%%%%%%%%%%%%%%%%%%%%%%
clear munx muny m x y dat
dat= importdata('dos.dat');%导入态密度数据
x=dat(:,1);
y=dat(:,2);
[m,n]=size(x);
mun1=1;
subplot(1,2,2) %将态密度图排列在第一排的第二个位置
hold on
line_color=[0 0 0
0 0 1
1 0.5 0
0 0.5 0
0.7 0.2 0.4
0.2 0.6 0.3];%每条线颜色的设置
co=1;
for i=1:m-1
if x(i) > x(i+1)||i == m-1
plot(munx,muny,'Color',[line_color(co,1),line_color(co,2),line_color(co,3)],'linewidth',2)
hold on
mun1=1;
co=co+1;
clear munx muny
i=i+1;
else
munx(mun1)=x(i);
muny(mun1)=y(i);
mun1=mun1+1;
i=i+1;
end
end
%%%%%%%%%%%%%%%%%%%%输入%%%%%%%%%%%
y_statr=0 ;%y轴的起始端默认为0
y_end=15 ;%y轴的取值的结束端
x_statr=-2;%x轴的取值的开始端
x_end=2 ;%x轴的取值的结束端
%%%%%%%%%%%%%%%%%%%%截止%%%%%%%%%%%
set(gca,'XTick',(x_statr:1:x_end),'linewidth',2)
set(gca,'YTick',(y_statr:3:y_end),'linewidth',2)
axis([x_statr,x_end,y_statr,y_end])
plot([0,0],[0,y_end],'--r','linewidth',1)
box off
plot([x_statr,x_end],[y_end,y_end],'k','linewidth',2)
plot([x_end,x_end],[y_end,y_statr],'k','linewidth',2)
xlabel('Energy(Ev)','FontSize',16)
ylabel('DOS','FontSize',16)
%%%%%%%%%%%%%%%%%%输入%%%%%%%%%%%%
legend('DOS','W 5d','S 3s'); %输入每一条能带的名称这里有3条分别按‘’,的形式补充
%%%%%%%%%%%%%%%%%%截止%%%%%%%%%%%%
hold on