Matlab 让多图排版更美观
文章目录
- 一、默认matlab绘图
- 二、预备知识
- 1、图片位置和大小
- 2、字体属性设置
- 3、坐标刻度设置
- 三、破茧成蝶
- 四、分图函数
- 1、保比例
- 2、横竖边缘相同
- 3、横竖边缘相同且为50像素
- 4、任意多个子图
一、默认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指向整个figure
- gca指向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:amagy=(a-i)*hei1+sum(mary(1:end-i));for j=1:bmagx=(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==1ylabel('Ylab');set(gca,'YTick',yt1,'YTicklabel',ytl1);endif i==axlabel('Xlab');set(gca,'XTick',xt,'XTicklabel',xtl1);endend
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:afor j=1:bdata(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的取值是有限度的,超过这个限度就会可能出现这种情况:
Matlab 让多图排版更美观相关推荐
- matlab disp fprinr,matlab如何使输出结果更美观(symdisp函数——pretty函数升级版)
matlab中有些计算结果比较长,直接查看有些困难,下面介绍pretty和symdisp函数优化输出结果,使结果更为直观. 演示示例1 有一个计算结果如下: >> f1 f1 = y^5 ...
- matlab如何使输出结果更美观(symdisp函数——pretty函数升级版)
matlab中有些计算结果比较长,直接查看有些困难,下面介绍pretty和symdisp函数优化输出结果,使结果更为直观. 演示示例1 有一个计算结果如下: >> f1f1 =y^5 + ...
- matlab pretty什么用,matlab如何使输出结果更美观(symdisp函数——pretty函数升级版)...
EDA365欢迎您登录! 您需要 登录 才可以下载或查看,没有帐号?注册 x & t7 n0 d: a# m0 O( y- Lmatlab中有些计算结果比较长,直接查看有些困难,下面介绍pre ...
- html显示多张照片的布局,多图片如何排版?手把手教你多图排版布局
确实,当我们遇到很多图片时,总是容易被排版困住,不知道该如何更好的处理图片布局 不要慌,稿叔今天就和大伙分享我在排版时经常参考的案例,同时还有5个关于排版的技巧以及多图排版神器一并送上,希望能够帮助到 ...
- 用python画漂亮图-零基础用 Python 画图表,让你的论文更美观
曾经我在高中的时候有一篇数学探索的小作业,其中我需要画出一张比较复杂的函数图.由于 X 和 Y 的坐标轴标签都需要一定的自定义,所以微软 Office 自带的画图工具自然无法满足我的要求.经过一段时间 ...
- matlab中等高图_高图– jQuery的更深入实践
matlab中等高图 Highcharts – deeper practice for real statistics Everyone of us can face with a situation ...
- MATLAB导出矢量图结合Visio或Adobe illustrator处理图片
来源 使用matlab完成绘图后,希望直接导出矢量图供写作,而不是PNG等位图. 有些论文对图的数量还有限制,有时需要将多个图进行合并.虽然可以直接使用matlab,latex等进行合并,但感觉这两种 ...
- Matlab画三维图的一些技巧
引言 本人是一位数学科研工作者,平时的文章采用的是latex编写,里面图形的生成主要来自于Matlab(个人对Matlab非常喜欢,感觉上手比较容易,更亲民).对于图形的处理比较频繁,而且总会有一些特 ...
- thinkphp5 图片压缩旋转_PPT图片超多,如何让排版更精致?
hello,大家好,之前有一位粉丝朋友问我:"多张图片的PPT到底该如何排版,有什么小妙招没?" 所以,今天,我们就来聊聊PPT中多图排版的问题?通常情况下,遇到多张图片,我们习惯 ...
- [html] 当img标签中的src图片加载失败时,怎么让它变得更美观呢?
[html] 当img标签中的src图片加载失败时,怎么让它变得更美观呢? 当默认图也失效,就会陷入死循环,需加变量计数,如果是 vue 的话用 @error.once 更妙.在 onerror 给元 ...
最新文章
- 【人脸表情识别】不得不读的重要论文推荐(2019-2020篇)
- SAP PP常用表(重要)
- 感染性的木马病毒分析之样本KWSUpreport.exe
- 什么是无头电商 - headless commerce
- 批量上传插件(flash,html5,jquery)
- SQL select查询原理--查询语句执行原则转
- AI一体机高速自由流收费稽核解决方案
- 微信开发原理 公众平台开发模式的数据交互方式
- H3C使用ping命令
- TensorFlow精进之路(十五):深度神经网络简介
- 14. Controller
- JQuery 实现表格数据行上移与下移效果
- 【路径规划】基于matlab动态多群粒子群算法局部搜索路径规划【含Matlab源码 448期】
- msm 8953 camera 流程
- facade设计模式学习(作者:KiddLee 来源:博客园 酷勤网收集 2007-09-03)
- MSSQL 负载均衡(Moebius)
- zabbix5.0-06-报警媒介
- Android手机app的adb命令测试电量
- PROFINET分布式I/O总线模块的优势有哪些?
- 【Linux】好玩的Linux命令(二)