Matlab 让多图排版更美观 您所在的位置:网站首页 matlab怎么把几个图画一起 Matlab 让多图排版更美观

Matlab 让多图排版更美观

2024-07-15 20:11| 来源: 网络整理| 查看: 265

文章目录 一、默认matlab绘图二、预备知识1、图片位置和大小2、字体属性设置3、坐标刻度设置 三、破茧成蝶四、分图函数1、保比例2、横竖边缘相同3、横竖边缘相同且为50像素4、任意多个子图

本文是 Matlab 各种画图 的子博文。

一、默认matlab绘图 figure x=0:0.001:20; y1=sin(x); y2=cos(x); y3=2*sin(x); y4=2*cos(x); subplot(221);plot(x,y1);title('sin');xlabel('x');ylabel('y'); subplot(222);plot(x,y2);title('cos');xlabel('x');ylabel('y'); subplot(223);plot(x,y3);title('2sin');xlabel('x');ylabel('y'); subplot(224);plot(x,y4);title('2cos');xlabel('x');ylabel('y');

在这里插入图片描述 对于matlab默认的绘图,有以下几点让笔者不满意的地方

图标题字体被加粗了由于四个图的xlabel和ylabel都一样,想让其只显示一个,换句话说,就是想只显示1、3图的ylabel,只显示2、4图的xlabel。在只显示一个xlabel和ylabel的情况下,图与图之间的间距就会显得特别大,想调整一下图的间距。图的XTick和YTick划分让笔者不满意,因为曲线将整个图都填满了,显得很拥挤。

基于上述几个问题,初步思路为:

FontWeight调整字体粗细,可选的属性有: FontWeight含义normal正常bold加粗 不想显示的label用''代替set(gca,'position',[mag mag1 big big])改变图的大小set(gca,'XTick',x0,'XTicklabel',x1);,不想显示的用''代替,set(gca,'XLim',[min, max]);改变坐标范围。 二、预备知识 1、图片位置和大小

关于图片位置及大小情况,首先要了解matlab的绘图机制。先来看一个简单例子:

figure set(gcf,'position',[100 0 800 600]); subplot(221) set(gca,'position',[0.05 0.55 0.4 0.4],'xtick',[],'ytick',[],'box','on');

结果如下 在这里插入图片描述

gcf指向整个figuregca指向subplot之后的子图坐标系set(gcf)单位是像素,set(gca)单位是百分比存在三个坐标系和两个特征点 2、字体属性设置

字体的常用属性有以下几个:

属性含义取值FontName字体名称Arial、Times New Roman,etc.FontSize字体大小10 number,etc.FontWeight字体粗细normal(正常)、bold(加粗)FontAngle字体倾斜italic(意大利斜体)、normal(正常) set(gca,'FontName','Times New Roman','FontSize',14,'FontWeight','bold','FontAngle','italic' )%设置坐标轴刻度字体名称,大小,加粗 ,斜体; title('tit','FontWeight','normal'); 3、坐标刻度设置 set(gca,'XLim',xl1,'XTick',xt1,'XTicklabel',xtl1);

XLim指的是刻度范围,xl1是一个一行二列的矩阵;XTick指的是标刻度的位置,xt1一般是数值型的;XTicklabel指的是在标刻度的文字内容,xtl1一般是char型的;xt1和xtl1需要长度一致,在某个刻度处若不想显示内容,可以用''占位。

三、破茧成蝶 function draw2() figure x=0:0.001:20; y1=sin(x); y2=cos(x); y3=2*sin(x); y4=2*cos(x); wid=800; hei=600; bili=wid/hei; wid1=0.43; lefx=1-wid1*2; lefy=lefx*bili; hei1=(1-lefy)/2; magx=lefx*8/14; %margin x intx=lefx*3/14; %interval x magy=lefy*8/14; %margin y inty=lefy*3/14; %interval y magx1=magx+wid1+intx; magy1=magy+hei1+inty; xt=0:5:10;xtl1=sprintfc('%g',xt);xtl2={'','',''}; yt1=-1:1;ytl1=sprintfc('%g',yt1);ytl3={'','',''}; yt2=-2:2:2;ytl2=sprintfc('%g',yt2); set(gcf,'position',[0 0 wid hei]) subplot(221) set(gca,'position',[magx magy1 wid1 hei1],'xtick',[],'ytick',[],'box','on') plot(x,y1); set(gca,'XLim',[0, 11]); set(gca,'YLim',[-1.5, 1.5]); title('sin','FontSize',10,'FontName','Arial','FontWeight','normal'); set(gca,'YTick',yt1,'YTicklabel',ytl1); set(gca,'XTick',xt,'XTicklabel',xtl2); ylabel('y'); subplot(222) set(gca,'position',[magx1 magy1 wid1 hei1],'xtick',[],'ytick',[],'box','on') plot(x,y2); set(gca,'XLim',[0, 11]); set(gca,'YLim',[-1.5, 1.5]); title('cos','FontSize',10,'FontName','Arial','FontWeight','normal'); set(gca,'YTick',yt1,'YTicklabel',ytl3); set(gca,'XTick',xt,'XTicklabel',xtl2); subplot(223) plot(x,y3); set(gca,'XLim',[0, 11]); set(gca,'YLim',[-3, 3]); set(gca,'position',[magx magy wid1 hei1],'xtick',[],'ytick',[],'box','on') title('2sin','FontSize',10,'FontName','Arial','FontWeight','normal'); set(gca,'YTick',yt2,'YTicklabel',ytl2); set(gca,'XTick',xt,'XTicklabel',xtl1); xlabel('x'); ylabel('y'); subplot(224) plot(x,y4); set(gca,'XLim',[0, 11]); set(gca,'YLim',[-3, 3]); set(gca,'position',[magx1 magy wid1 hei1],'xtick',[],'ytick',[],'box','on') title('2sin','FontSize',10,'FontName','Arial','FontWeight','normal'); set(gca,'YTick',yt2,'YTicklabel',ytl3); set(gca,'XTick',xt,'XTicklabel',xtl1); xlabel('x'); end

在这里插入图片描述 ps:看起来好像也没有很好看,笔者随便找的例子体现不出效果,其他的数据也许会好看一点。

四、分图函数

关于四子图的情况,笔者编写了两种分图函数,一种分图的思想为:子图比例与大图比例保持相同;另一种分图的思想为:横向边缘与竖向边缘宽度相同。读者可根据自己的需求选取并结合自己的绘图内容加以扩充使用。两种函数如下:

1、保比例 function draw4() figure wid=1000; hei=600; big=0.43; lef=1-big*2; mag=lef*8/14; %margin int=lef*3/14; %interval mag1=mag+big+int; set(gcf,'position',[0 0 wid hei]) subplot(221) title('GPS-IF','FontSize',10,'FontName','Arial','FontWeight','normal'); set(gca,'position',[mag mag1 big big],'xtick',[],'ytick',[],'box','on') subplot(222) set(gca,'position',[mag1 mag1 big big],'xtick',[],'ytick',[],'box','on') subplot(223) set(gca,'position',[mag mag big big],'xtick',[],'ytick',[],'box','on') subplot(224) title('GPS-IF','FontSize',10,'FontName','Arial','FontWeight','normal'); set(gca,'position',[mag1 mag big big],'xtick',[],'ytick',[],'box','on') end

在这里插入图片描述

2、横竖边缘相同 function draw3() figure wid=1000; hei=600; bili=wid/hei; wid1=0.43; lefx=1-wid1*2; lefy=lefx*bili; hei1=(1-lefy)/2; magx=lefx*8/14; %margin x intx=lefx*3/14; %interval x magy=lefy*8/14; %margin y inty=lefy*3/14; %interval y magx1=magx+wid1+intx; magy1=magy+hei1+inty; set(gcf,'position',[0 0 wid hei]) subplot(221) title('GPS-IF','FontSize',10,'FontName','Arial','FontWeight','normal'); set(gca,'position',[magx magy1 wid1 hei1],'xtick',[],'ytick',[],'box','on') subplot(222) set(gca,'position',[magx1 magy1 wid1 hei1],'xtick',[],'ytick',[],'box','on') subplot(223) set(gca,'position',[magx magy wid1 hei1],'xtick',[],'ytick',[],'box','on') subplot(224) title('GPS-IF','FontSize',10,'FontName','Arial','FontWeight','normal'); set(gca,'position',[magx1 magy wid1 hei1],'xtick',[],'ytick',[],'box','on') end

在这里插入图片描述

3、横竖边缘相同且为50像素 function draw3() figure a=2;b=2; wid=1000;hei=600; pmag=50; %the size of margin pix marx(1:b+1,1)=3;marx(1)=8; mary(1:a+1,1)=3;mary(1)=8; sumx=sum(marx);sumy=sum(mary); marx=marx./sumx;mary=mary./sumy; lefy=pmag/hei/mary(1); lefx=pmag/wid/marx(1); wid1=(1-lefx)/b; hei1=(1-lefy)/a; magx=lefx*8/14; %margin x intx=lefx*3/14; %interval x magy=lefy*8/14; %margin y inty=lefy*3/14; %interval y magx1=magx+wid1+intx; magy1=magy+hei1+inty; xt=0:0.5:1;xtl1=sprintfc('%g',xt);xtl2={'','',''}; yt1=0:0.5:1;ytl1=sprintfc('%g',yt1);ytl3={'','',''}; yt2=-2:2:2;ytl2=sprintfc('%g',yt2); set(gcf,'position',[0 0 wid hei]) subplot(221) set(gca,'position',[magx magy1 wid1 hei1],'xtick',[],'ytick',[],'box','on') title('TiT1','FontSize',10,'FontName','Arial','FontWeight','normal'); set(gca,'Ylim',[0 1],'YTick',yt1,'YTicklabel',ytl1); ylabel('Ylab'); subplot(222) set(gca,'position',[magx1 magy1 wid1 hei1],'xtick',[],'ytick',[],'box','on') subplot(223) set(gca,'position',[magx magy wid1 hei1],'xtick',[],'ytick',[],'box','on') subplot(224) set(gca,'position',[magx1 magy wid1 hei1],'xtick',[],'ytick',[],'box','on') title('GPS-IF','FontSize',10,'FontName','Arial','FontWeight','normal'); end 4、任意多个子图

此函数可绘制任意多个子,依据以下标准绘制

边缘像素为50边缘与间隙比为8:3横竖间隙比为1:1 % main draw function draw5(wid,hei,a,b) figure pmag=50; %the size of margin pix marx(1:b+1,1)=3;marx(1)=8; mary(1:a+1,1)=3;mary(1)=8; sumx=sum(marx);sumy=sum(mary); marx=marx./sumx;mary=mary./sumy; lefy=pmag/hei/mary(1); lefx=pmag/wid/marx(1); marx=marx.*lefx; mary=mary.*lefy; wid1=(1-lefx)/b; hei1=(1-lefy)/a; xt=0:0.5:1;xtl1=sprintfc('%g',xt);xtl2=kcell(size(xtl1));xl=[0 1]; yt1=0:0.5:1;ytl1=sprintfc('%g',yt1);ytl2=kcell(size(ytl1));yl=[0 1]; set(gcf,'position',[0 0 wid hei]) for i=1:a magy=(a-i)*hei1+sum(mary(1:end-i)); for j=1:b magx=(j-1)*wid1+sum(marx(1:j)); n=(i-1)*b+j; subplot(a,b,n); set(gca,'position',[magx magy wid1 hei1],'box','on'); % plot here! set(gca,'XLim',xl,'XTick',xt,'XTicklabel',xtl2); set(gca,'YLim',yl,'YTick',yt1,'YTicklabel',ytl2); if j==1 ylabel('Ylab'); set(gca,'YTick',yt1,'YTicklabel',ytl1); end if i==a xlabel('Xlab'); set(gca,'XTick',xt,'XTicklabel',xtl1); end end end end % get a null cell which is a*b dims function data=kcell(m) a=m(1);b=m(2); data=cell(a,b); for i=1:a for j=1:b data(i,j)=cellstr(num2str(data{i,j})); end end end

注意:

代码中for j=1:b改为for j=b:-1:1可提高b的限度。这个代码版本是横着画的,也可以竖着画,要竖着画需将for i=1:a和for j=1:b交换位置,并且相应的magy和magx两行代码也要交换位置。 在这里插入图片描述 在这里插入图片描述 在宽和高一定的情况下,a和b的取值是有限度的,超过这个限度就会可能出现这种情况: 在这里插入图片描述


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有