用Matlab处理MaterialStudio/Castep的数据

2025-10-20 02:48:11

1、首先把数据从MS中导出,可以选则“File|Export”,也可以直接在图像上右键,点击Copy,再在记事本或文档中Paste粘贴

用Matlab处理MaterialStudio/Castep的数据

用Matlab处理MaterialStudio/Castep的数据

1、观察从MS中导出的数据格式,一般是.csv文件,可以用记事本或者其它的文本编辑器打开。本文中所举的例子是能带图。有两列数据,第一列是周期性重复的k值,第二列是能量值。为了方便作图,首先对数据作预处理。参考代码见后文。

去掉MS对数据分段用的无意义巨大数值1E308

将周期性的一列数据“折叠”成几列的格式,方便调用MatLab的plot函数作图。

用Matlab处理MaterialStudio/Castep的数据

2、可以利用导入函数importdata导入csv文件,同时指定数据的分隔符,如“,”“。”“ ”等。还可以指定从第几行开始导入数据,参考代码见后文。

注意这一步进行时,要先把数据文件所在文件夹加入预设路径

方法是在主页选项卡上点击“预设路径”,按提示加入。

用Matlab处理MaterialStudio/Castep的数据

用Matlab处理MaterialStudio/Castep的数据

3、然后就可以调用plot作图了。

做好图后可以指定标题title,图例legend,轴标记Label,刻度tick等等。特别的,这里可以自定义轴标记,所以可以很方便的做出能带图。

用Matlab处理MaterialStudio/Castep的数据

用Matlab处理MaterialStudio/Castep的数据

4、做好图后,同样可以方便的用saveas函数指定"文件名.格式"导出,会将文件保存在当前目录中。

更改当前目录的命令是:

cd('路径名')   如cd('C:\Users\')  记得加引号。

用Matlab处理MaterialStudio/Castep的数据

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢