用Matlab处理MaterialStudio/Castep的数据
1、首先把数据从MS中导出,可以选则“File|Export”,也可以直接在图像上右键,点击Copy,再在记事本或文档中Paste粘贴
1、观察从MS中导出的数据格式,一般是.csv文件,可以用记事本或者其它的文本编辑器打开。本文中所举的例子是能带图。有两列数据,第一列是周期性重复的k值,第二列是能量值。为了方便作图,首先对数据作预处理。参考代码见后文。
去掉MS对数据分段用的无意义巨大数值1E308
将周期性的一列数据“折叠”成几列的格式,方便调用MatLab的plot函数作图。
2、可以利用导入函数importdata导入csv文件,同时指定数据的分隔符,如“,”“。”“ ”等。还可以指定从第几行开始导入数据,参考代码见后文。
注意这一步进行时,要先把数据文件所在文件夹加入预设路径
方法是在主页选项卡上点击“预设路径”,按提示加入。
3、然后就可以调用plot作图了。
做好图后可以指定标题title,图例legend,轴标记Label,刻度tick等等。特别的,这里可以自定义轴标记,所以可以很方便的做出能带图。
4、做好图后,同样可以方便的用saveas函数指定"文件名.格式"导出,会将文件保存在当前目录中。
更改当前目录的命令是:
cd('路径名') 如cd('C:\Users\') 记得加引号。
1、%调用画图函数的脚本
cd('\Documents\MATLAB\BandStructure')
%指定当前文件夹即保存位置
global MainPosition
gap=[4.058,5.659]
MainPosition=[0.169 0.169 0.260 0.260 0.428 ...
0.428 0.520 0.520 0.714 0.714 0.805 0.805];
% 指定带隙、主标记位置以划画竖线去掉了0和1--去掉了首末位置
Position=[0 0.0845 0.169 0.2145 0.260 0.3440 0.428...
0.4740 0.520 0.6170 0.714 0.7595 0.805 0.9025 1]; %x轴刻度位置
Label={'A' 'R' 'L' 'U' 'M' 'Σ' 'Γ' 'Δ' 'A' 'S'...
'H' 'P' 'K' 'T' 'Γ'}; %刻度名称
savefilename={'BandStr_GGA'}
% 指定画图文件名称
h(1)=figure(1);
BandStrucPlotFun(savefilename{1},gap(1),Position,Label) %调用画图函数
% 能带作图结束
2、%画图函数
% 参考调用
% plot(x,y,'--gs',... 线型 与 数据点记号
% 'LineWidth',2,... 线宽
% 'MarkerSize',10,... 记号大小
% 'MarkerEdgeColor','b',... 记号边缘颜色
% 'MarkerFaceColor',[0.5,0.5,0.5]) 记号内部颜色
% set(get(gca,'Title'),'Color','k','FontSize',13) 指定标题 及颜色字号
%anotation 指定说明文字(带隙宽度) 四坐标为左下角xywh 以figure归一化
%参考结束
function []=BandStrucPlotFun(savefilename,gap,Position,Label)
global MainPosition
%声明全局变量,这个变量标记X轴标记主要位置
filename=[savefilename, '.csv'];
delimiterIn = ',';
headerlinesIn = 0;
%指定导入数据格式
BandStr = importdata(filename,delimiterIn,headerlinesIn);
BandStr2=[];
BandStr1=[0 200;BandStr]; %使导入的数据周期性完整,便于处理
[row,col]=find(BandStr1>100); %去掉无意义巨大值
row1=[row;row(end)];
for i=1:size(row)-1
BandStr2(:,i)=BandStr1((row1(i)+1):(row1(i+1)-1),2);
end
BandStr2=[BandStr1(2:row(2)-1,1),BandStr2];
%折叠第2列数据
%导入数据,并做预处理。
plot(BandStr2(:,1),BandStr2(:,2:end),'h-','LineWidth',1,'MarkerSize',2)
axis([0 1 -15 15])
%作图并指定 线型 线宽 坐标轴限度
hold on;
plot([0,1],[0,0],'Color','k','LineStyle','-') %画出0能线
for i=1:2:11
plot(MainPosition(1,i:i+1),[-15,15],...
'Color','k','LineStyle','--','LineWidth',1)
end
set(gca,'Title',text('String',savefilename,'Interpreter','none',...
'FontName','Times new roman','FontWeight','bold',...
'Color','k','FontSize',25))
%指定标题格式
% ,'Units','normalized','Position',[0.5 1.2] 这个是标题位置的附加考虑
% 指定标题 标题格式 位置 以坐标轴大小为归一化
set(get(gca,'YLabel'),'String','Energy/eV','FontSize',15....
,'FontName','Times new roman','FontWeight','bold')
set(gca,'Xtick',Position,'XTickLabel',Label,...
'FontName','Times new roman','FontSize',15,'XGrid','off')
%以上指定标题 y轴标记位置及名称 不画出x轴网格线/画出是on
% 字体 Calibri/Times new roman等等
% annotation('textbox', [0.2,0.4,0.1,0.1],...
% 'String', 'Straight Line Plot 1 to 10',...
% 'LineStyle','none','FitBoxToText','on',...
% 'HorizontalAlignment','center');
% title的调用格式(title 属于text)
% text(x,y,z,'string','PropertyName',PropertyValue....)
% text的位置以axes归一化
set(gca,'Units','normalized','Position',[0.10 0.10 0.80 0.80],...
'TickLength',[0 0.001])
% 设定坐标轴的大小,以figure为归一化
%并令x tick的长度为0,即不显示小短线。
text('String',['Bandgap is ' num2str(gap) ' eV'],...
'HorizontalAlignment','right',...
'FontName','Times new roman','FontWeight','bold','Color','k',...
'FontSize',15,'Units','normalized','Position',[1 1.03])
text('String','AlN',...
'HorizontalAlignment','left',...
'FontName','Times new roman','Color','k',...
'FontSize',15,'Units','normalized','Position',[0.03 0.52])
% 以上指定说明文字,指定带隙和物质名称
set(gcf, 'PaperUnits', 'centimeters');
set(gcf, 'PaperSize', [27 15]);
set(gcf, 'PaperPositionMode', 'manual');
set(gcf, 'PaperUnits', 'normalized');
set(gcf, 'PaperPosition', [0.03 0.05 0.94 0.9]);
saveas(gcf,savefilename,'png')
% 以上格式化并输出图像,保存在\MATLAB\BandStructure文件夹
end