function subPlotIndex=multiDraw(varargin)
%NOTE: please use together with multiDrawEnd()
%this function is used to plot multi subplots on on panel
%multiDrawEnd() will reset the global parameter
%'Global_multiDrawFunctionSet_figure'
%Version beta 1.0 2015/6/22
%example: subPlotIndex=multiDraw([2,1],'title','code Comparison','colorbar',[0,0]);
%example: multiDrawEnd();
screenSize=[1920,1080];
global Global_multiDrawFunctionSet_figure;
if length(varargin)<1
error('not enough input argument');
elseif mod(length(varargin),2)==0
error('input argument number must be odd');
end
titleText='';
xLabelText='';
yLabelText='';
gap=0;
figureS=[0 0];
figureInd=1;
subplotSize=[0 0];
note='';
SideSqueeze=[0 0];
maxSizeSwitch=1;
xticklabelSwitch=1;
yticklabelSwitch=1;
horizontalSpace=0;
verticalSpace=0;
noteSize=0.04;
labelSize=0.04;
titleYPos=0;
%inteperte varargin-----------------------------------
argumentN=(length(varargin)-1)/2;
for i=1:argumentN
if strcmp( varargin{i*2},'title')
titleText=varargin{i*2+1};
elseif strcmp( varargin{i*2},'xLabel')
xLabelText=varargin{i*2+1};
elseif strcmp( varargin{i*2},'yLabel')
yLabelText=varargin{i*2+1};
elseif strcmp( varargin{i*2},'xticklabel')
if strcmp(varargin{i*2+1},'off')
xticklabelSwitch=0;
elseif strcmp(varargin{i*2+1},'on')
xticklabelSwitch=1;
else
error('unknown xticklabel property');
end
elseif strcmp( varargin{i*2},'yticklabel')
if strcmp(varargin{i*2+1},'off')
yticklabelSwitch=0;
elseif strcmp(varargin{i*2+1},'on')
yticklabelSwitch=1;
else
error('unknown yticklabel property');
end
elseif strcmp( varargin{i*2},'gap')
gap=varargin{i*2+1};
elseif strcmp( varargin{i*2},'figureSize')
figureS=varargin{i*2+1};
elseif strcmp( varargin{i*2},'figureInd')
figureInd=varargin{i*2+1};
elseif strcmp( varargin{i*2},'subplotSize')
subplotSize=varargin{i*2+1};
elseif strcmp( varargin{i*2},'maxSize')
if strcmp(varargin{i*2+1},'off')
maxSizeSwitch=0;
elseif strcmp(varargin{i*2+1},'on')
maxSizeSwitch=1;
else
error('unknown maxSize property');
end
elseif strcmp( varargin{i*2},'note')
note=varargin{i*2+1};
SideSqueeze(2)=SideSqueeze(2)+0.15;
elseif strcmp( varargin{i*2},'notesize')
noteSize=varargin{i*2+1};
elseif strcmp( varargin{i*2},'labelsize')
labelSize=varargin{i*2+1};
elseif strcmp( varargin{i*2},'colorbar')
SideSqueeze(1)=SideSqueeze(1)+0.02;
elseif strcmp( varargin{i*2},'colormap')
elseif strcmp( varargin{i*2},'horizontalspace')
horizontalSpace=varargin{i*2+1};
elseif strcmp( varargin{i*2},'verticalspace')
verticalSpace=varargin{i*2+1};
else
error('input argument type unknown');
end
end
%global parameters -------------------------------------------------
if ~exist('Global_multiDrawFunctionSet_figure','var')
globalFigureInd=1;
else
globalFigureInd=length(Global_multiDrawFunctionSet_figure)+1;
end
Global_multiDrawFunctionSet_figure(globalFigureInd).varargin=varargin;
Global_multiDrawFunctionSet_figure(globalFigureInd).tickSwitch=0;
Global_multiDrawFunctionSet_figure(globalFigureInd).subPlotIndex=0;
Global_multiDrawFunctionSet_figure(globalFigureInd).SideSqueeze=SideSqueeze;
Global_multiDrawFunctionSet_figure(globalFigureInd).figureInd=figureInd;
%-------------------------------------------------------------------
subPlotMatrix=varargin{1};
width=subPlotMatrix(1);
height=subPlotMatrix(2);
%tick switch [x,y];
Global_multiDrawFunctionSet_figure(globalFigureInd).tickSwitch=zeros(height*width,2);
xPlotRange=[0.1+verticalSpace 0.9-SideSqueeze(1)-verticalSpace];
yPlotRange=[0.1+SideSqueeze(2)+horizontalSpace 0.9];
xPlotRangeStep=(xPlotRange(2)-xPlotRange(1))/width-gap;
yPlotRangeStep=(yPlotRange(2)-yPlotRange(1))/height-gap;
Global_multiDrawFunctionSet_figure(globalFigureInd).xPlotRange=xPlotRange;
Global_multiDrawFunctionSet_figure(globalFigureInd).yPlotRange=yPlotRange;
figure(figureInd);
if figureS(1)~=0
canvaseSize(1)=figureS(1);
canvaseSize(2)=figureS(2);
% set(figureInd, 'position', [0 0 canvaseSize(1) canvaseSize(2)]);
elseif subplotSize(1)~=0
canvaseSize=[0,0];
canvaseSize(1)=subplotSize(1)*width/(xPlotRange(2)-xPlotRange(1)-(width-1)*gap);
canvaseSize(2)=subplotSize(2)*height/(yPlotRange(2)-yPlotRange(1)-(height-1)*gap);
if maxSizeSwitch==1
canvaseSize=min(screenSize(1)/canvaseSize(1).*canvaseSize, screenSize(2)/canvaseSize(2).*canvaseSize);
end
end
set(figureInd, 'position', [0 0 canvaseSize(1) canvaseSize(2)]);
labelGap=0.08;
if canvaseSize(1)>canvaseSize(2)
labelGapX=labelGap/canvaseSize(1)*canvaseSize(2);
labelGapY=labelGap;
else
labelGapX=labelGap;
labelGapY=labelGap/canvaseSize(2)*canvaseSize(1);
end
photoInd=1;
for verticalInd=1:height
for horizontalInd=1:width
subPlotIndex(photoInd)=subplot('Position',[xPlotRange(1)+(xPlotRangeStep+gap)*(horizontalInd-1) yPlotRange(1)+(yPlotRangeStep+gap)*(height-verticalInd) xPlotRangeStep yPlotRangeStep]);
set(gca,'yticklabel',[]);
set(gca,'xticklabel',[]);
if horizontalInd==1 && yticklabelSwitch==1
Global_multiDrawFunctionSet_figure(globalFigureInd).tickSwitch(photoInd,2)=1;
end
if verticalInd==1 && xticklabelSwitch==1
Global_multiDrawFunctionSet_figure(globalFigureInd).tickSwitch(photoInd,1)=1;
end
photoInd=photoInd+1;
end
end
axes('Position',[0 0 1 1],'Xlim',[0 1],'Ylim',[0 1],'Box','off','Visible','off','Units','normalized');
if ~isempty(titleText)
if ~isempty(note)
titleYPos=0.18;
else
titleYPos=0.09;
end
titleH=text(0.50,titleYPos,titleText, 'FontUnits', 'normalized', 'FontSize',0.05, ...
'FontWeight','bold','units','normalized');
extentText=get(titleH,'extent');
delete(titleH);
if extentText(3)>0.8
scale=0.8/extentText(3);
else
scale=1;
end
posText(1)=0.5-extentText(3)/2*scale;
posText(2)=titleYPos-extentText(4)/2*scale;
text(posText(1),posText(2),titleText, 'FontUnits', 'normalized', 'FontSize',0.05*scale, ...
'FontWeight','bold','units','normalized');
end
if ~isempty(xLabelText)
xPosXlabel=mean(xPlotRange);
yPosXlabel=.88+labelGapY;
xlabelFontSize=labelSize;
xlabelH=text(xPosXlabel,yPosXlabel,xLabelText,'FontUnits', 'normalized', 'FontSize',xlabelFontSize);
extentText=get(xlabelH,'extent');
delete(xlabelH);
posText(1)=xPosXlabel+(xPosXlabel-(extentText(1)+extentText(3)/2));
posText(2)=yPosXlabel+(yPosXlabel-(extentText(2)+extentText(4)/2));
text(posText(1),posText(2),xLabelText,'FontUnits', 'normalized', 'FontSize',xlabelFontSize);
end
if ~isempty(yLabelText)
xPosYlabel=xPlotRange(1)-labelGapX-(labelSize-0.04);
yPosYlabel=(yPlotRange(1)+yPlotRange(2))/2;
ylabelFontSize=labelSize;
ylabelH=text(xPosYlabel,yPosYlabel,yLabelText,'FontUnits', 'normalized', 'FontSize',ylabelFontSize,'unit','normalized');
extentText=get(ylabelH,'extent');
% set(ylabelH,'rotation',90,'unit','normalized');
% extentText=get(ylabelH,'extent');
delete(ylabelH);
% posText(1)=xPosYlabel-(extentText(1)-extentText(3)/2-xPosYlabel);
% posText(2)=yPosYlabel-(extentText(2)-extentText(4)/2-yPosYlabel);
posText(1)=xPosYlabel;
posText(2)=yPosYlabel+(yPosYlabel-(extentText(2)+extentText(3)/2));
ylabelH=text(posText(1),posText(2)
multiDraw.rar_MATLAB画多个图片_sub-figure
版权申诉
5星 · 超过95%的资源 112 浏览量
2022-07-14
11:37:28
上传
评论
收藏 2KB RAR 举报
weixin_42653672
- 粉丝: 93
- 资源: 1万+
最新资源
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- 关于mybatis的一些相关资源
- 关于mybatist的一些相关资源
- uni-app实战社区交友类app开发&带视频教程
- mybatis动态sql的一些相关资源
- 隐马尔可夫模型在期货市场的应用_曾琦裕 (1).caj
- 极域解控和极域反控!!!
- 安卓android-serialport-api 串口demo源代码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论11