MATLAB toolbox(1)

2017-01-16  by:CAE仿真在线  来源:互联网

以下函数自编;主要用于在一个figure上画多个类似的图,各小图之间横轴纵轴范围要近的图。



实现功能如下图所示

[h,ax,bigax]=multigrid('newfig',4,2);

在一个figure生成4行2列的axis

MATLAB toolbox(1)

分别在每个axis上画图

x = randn(100,4,2);

for i=1:4
for j =1:2
set(h,'CurrentAxes',ax(i,j),'NextPlot','add');
stairs(x(:,i,j));
axis tight;

end
end


MATLAB toolbox(1)

去掉各axis横纵轴,只留最下,最左坐标格
multigrid('adjust',ax)


MATLAB toolbox(1)


为每个小图标记

numlab = {'a','b';
'c','d';
'e','f';
'g','h'}
multigrid('label',ax,numlab);

MATLAB toolbox(1)



xlabel(bigax,'time');ylabel(bigax,'amplitude')

title(bigax,'signals')

MATLAB toolbox(1)


===============源程序===============================


function varargout=multigrid(flag,varargin)
% MULTIPLOT
% [H,AX,BIGAX]=MULTIPLOT(ROWS,COLS,LABEL,FUNHANDLE)
%
% [h,ax,bigax]=multigrid(flag,varargin)
%
% [h,ax,bigax]=multigrid('newfig',rows,cols)
% multigrid('label',ax,numlabel)
% multigrid('adjust',ax)
% multigrid('add',ax,codes,varargin);
%
% flag:
% newfig, creat new figure with the setting rows and cols.
% label, add the label on the figure
% adjust, adjust the x and y axes limit
%
%
% Author: J.H.Zhu<jhzhu99@gmail.com>
% Date: April 06, 2011.
% Revised:
% Revised:


switch flag
case {'newfig'}
rows =[]; cols =[];
if nargin>1,rows=varargin{1};end
if nargin>2, cols=varargin{2};end

if isempty(rows),rows =1; end
if isempty(cols),cols =1; end

h = clf;
BigAx = newplot;

set(BigAx,'Visible','off','color','none');

ax =zeros(rows,cols);
pos = get(BigAx,'Position');
width = pos(3)/cols;
height = pos(4)/rows;
space = .05; % 3 percent space between axes
pos(1:2) = pos(1:2) + space*[width height];
for i=rows:-1:1,
for j=cols:-1:1,
axPos = [pos(1)+(j-1)*width pos(2)+(rows-i)*height ...
width*(1-space) height*(1-space)];
ax(i,j) = axes('Position',axPos,'parent',h,...
'visible', 'on', 'Box','on');
end
end
idx = false(rows,cols);idx(rows,:)=1;
set(ax(~idx),'xticklabel','');
idx = false(rows,cols);idx(:,1)=1;
set(ax(~idx),'yticklabel','');

% Also set Title and X/YLabel visibility to on and strings to empty
set([get(BigAx,'Title'); get(BigAx,'XLabel'); get(BigAx,'YLabel')], ...
'String','','Visible','on');

varargout ={h,ax,BigAx};
case {'label'}
ax =[]; label=[];
if nargin>1,ax = varargin{1}; end
if nargin>2,label=varargin{2}; end

if isempty(ax),return; end
if isempty(label),return;end

[rows,cols]=size(ax);
for i =rows:-1:1
for j =cols:-1:1
if isnan(ax(i,j)),xlim(i,j,1:2)=NaN; ylim(i,j,1:2)=NaN; continue;end
set(get(ax(i,j),'parent'),'CurrentAxes',ax(i,j));
xlim(i,j,:)=get(ax(i,j),'xlim');
ylim(i,j,:)=get(ax(i,j),'ylim');
if ~isempty(label)
if isnumeric(label{i,j}),tex = num2str(label{i,j});
else tex =label{i,j};end
if ~all(isnan(tex))||~isempty(tex)
text(xlim(i,j,2),ylim(i,j,1),['\bf',tex],...
'HorizontalAlignment','center',...
'VerticalAlignment','baseline',...
'BackgroundColor',[0.992 0.918 0.796],...
'Interpreter','tex');
end
end
end
end

case {'adjust'}
ax =[];
if nargin>1,ax=varargin{1};end
if isempty(ax),return;end

[rows,cols]=size(ax);
for i =rows:-1:1
for j =cols:-1:1
if isnan(ax(i,j))
xlim(i,j,:)=NaN; ylim(i,j,:)=NaN;
continue;
end
set(get(ax(i,j),'parent'),'CurrentAxes',ax(i,j));
xlim(i,j,:)=get(ax(i,j),'xlim');
ylim(i,j,:)=get(ax(i,j),'ylim');
end
end

xlimmin =min(xlim(:,:,1),[],1); xlimmax =max(xlim(:,:,2),[],1);
ylimmin =min(ylim(:,:,1),[],2); ylimmax =max(ylim(:,:,2),[],2);

inset = .02;
for i=1:rows,
if isnan(ax(i,1)),continue;end
set(ax(i,1),'ylim',[ylimmin(i,1) ylimmax(i,1)])
dy = diff(get(ax(i,1),'ylim'))*inset;
idx = isnan(ax(i,:));
set(ax(i,~idx),'ylim',[ylimmin(i,1)-dy ylimmax(i,1)+dy])
end
for j=1:cols
if isnan(ax(1,j)),continue;end
set(ax(1,j),'xlim',[xlimmin(1,j) xlimmax(1,j)])
dx = diff(get(ax(1,j),'xlim'))*inset;
idx = isnan(ax(:,j));
set(ax(~idx,j),'xlim',[xlimmin(1,j)-dx xlimmax(1,j)+dx])
end
idx = findemptyidx('xtick',ax);
set(ax(~idx),'xticklabel','')
idx = findemptyidx('ytick',ax);
set(ax(~idx),'yticklabel','')
case {'add'}
ax =[];
if nargin>1,ax=varargin{1};end
if nargin>2,codes = varargin{2};end
if isempty(ax),return;end
if isempty(codes);return;end

[rows,cols]=size(ax);
for i =rows:-1:1
for j =cols:-1:1
if isnan(ax(i,j)),continue;end
set(get(ax(i,j),'parent'),'CurrentAxes',ax(i,j));
eval_r(codes);
end
end


otherwise
return;
end



function idx = findemptyidx(axesname,ax)

switch axesname

case {'xtick'}
rows=size(ax,1);
idx = isnan(ax);
[m,n]=find(idx==1);
a = m-1; a(a<1)=1;
b = m+1; b(b>rows)=rows;

idx(a,n)=1; idx(b,n)=1;
idx(end,:)=1;

case {'ytick'}
cols=size(ax,2);
idx = isnan(ax);
[m,n]=find(idx==1);
a = n-1; a(a<1)=1;
b = n+1; b(b>cols)=cols;

idx(m,a)=1; idx(m,b)=1;
idx(:,1)=1;

end


开放分享:优质有限元技术文章,助你自学成才

相关标签搜索:MATLAB toolbox(1) MatLab培训 MatLab培训课程 MatLab在线视频教程 MatLab技术学习教程 MatLab软件教程 MatLab资料下载 MatLab代做 MatLab基础知识 Fluent、CFX流体分析 HFSS电磁分析 Ansys培训 Abaqus培训 

编辑
在线报名:
  • 客服在线请直接联系我们的客服,您也可以通过下面的方式进行在线报名,我们会及时给您回复电话,谢谢!
验证码

全国服务热线

1358-032-9919

广州公司:
广州市环市中路306号金鹰大厦3800
电话:13580329919
          135-8032-9919
培训QQ咨询:点击咨询 点击咨询
项目QQ咨询:点击咨询
email:kf@1cae.com