MATLAB绘图美化超全超实用教程 |
您所在的位置:网站首页 › 奇葩字体怎么写出来好看一点 › MATLAB绘图美化超全超实用教程 |
本文将详细介绍如何用matlab绘图并美化。 如果你只会plot(x,y),那你的图将会不出意外地单薄&空洞&丑,本文将教你如何精心修饰matlab的成图,让图片看起来更好看,让自己的大作业和报告更好看一点。 关于figure() 创建图窗窗口:figure() figure()的属性: 'Name':在标题栏显示的名称,接字符串,如'Test' 'Position':在电脑屏幕上的位置和大小,后接向量[left,bottom,width,height]也就是说指定了图窗的左下角位置,再向右+width、向上+height延伸。 'unit':单位,可以选择'normalized',使得位置参数为屏幕的归一化位置,屏幕归一化坐标(x,y),(0,0)表示左下角,(1,1)表示右上角。 我的桌面'color':图窗背景颜色,'red'、'green'、'blue'、'cyan'、'magenta'、'yellow'、'black'、'white' 和 'none',其中none表示透明。或者RGB三通道表示法[R,G,B],其中三分量都要归一化到1,即R/255,G/255,B/255。 https://ww2.mathworks.cn/help/matlab/ref/figure.html例如: fullfig=figure('Name','Hello','unit','normalized','Position',[0.1, 0.1, 0.3, 0.7],'color',[100/255,100/255,100/255]); 将会产生左下角位置在[0.1,0.1]、长0.3宽0.7的图窗,其名字为'Hello',其背景颜色为[100/255,100/255,100/255]也就是灰色。 关于plot() plot(x,y)画图 'LineWidth',线条宽度,最小是1 'color',线条颜色,同上 'LineSpec',这里直接表示线的形状,不用写'LineSpec' https://www.mathworks.com/help/matlab/ref/linespec.html'MarkerSize'、'MarkerEdgeColor'、 'MarkerFaceColor':如果线形使用Marker,可以调节大小、边界颜色、内部颜色 例如, >> x=0:1/pi:2*pi; >> y=sin(x); >> plot(x,y,'--bo','LineWidth',2,'color','blue','MarkerSize',10,'MarkerEdgeColor','black','MarkerFaceColor','red') 表示画一条如下图所示的正弦函数,'--bo'表示虚线、蓝色、采样点用圆圈标出。线形和点形以及颜色可以自由组合。 关于图注、图例、坐标轴、字体大小 命名横纵坐标 a=xlabel('Name of x axis');b=ylabel('Name of y axis'); 设置标题 c=title('contents of your title'); 设置图例 d=legend('y1','y2'); 设置上述内容的位置、字体大小、粗细 set(a,'unit','normalized','Position',[x,y],'FontSize',number_fontsize,'FontName',name_of_font_style) set(a,'unit','normalized','Position',[x,y,width,height],'FontSize',number_fontsize,'FontName',name_of_font_style,'LineWidth',number_linewidth); 示例: >> x=0:1/pi:2*pi; >> y1=sin(x);y2=cos(x); %创建图窗% >> figure('color','white') %画sin(x)和cos(x)图% >> plot(x,y1,'--bo','LineWidth',2,'color','blue','MarkerSize',10,'MarkerEdgeColor','black','MarkerFaceColor','red'); >> hold on;plot(x,y2,'--g*','LineWidth',2,'color','blue','MarkerSize',10,'MarkerEdgeColor','black','MarkerFaceColor','red'); %创建坐标轴、标题、图例的对象 >> a=xlabel('x (time)');b=ylabel('y (m)');c=title('sin(x) and cos(x)');d=legend('sin(x)','cos(x)'); %位置、大小、字体大小、字体样式设置 >> set(a,'unit','normalized','Position',[0,-0.05],'fontsize',15,'fontname','Times New Roman'); >> set(b,'unit','normalized','Position',[-0.05,1],'fontsize',15,'fontname','Times New Roman'); >> set(c,'fontsize',15,'fontname','Times New Roman'); >> set(d,'unit','normalized','Position',[0.2,0.2,0.1,0.1],'fontsize',10) %图窗所有线条粗细设置为2 >> set(gca,'LineWidth',2) %开启网格 >> grid on; %设置x轴、y轴的显示范围 >> xlim([0 2*pi]) >> ylim([-1.1 1.1]) %注:如果想画到上限,只需用+inf代替上限 关于非常规坐标轴 >> set(gca,'YDir','reverse'); >> set(gca,'YDir','normal'); y坐标轴反向或正常 半对数、对数画图 semilogx(x,y);loglog(x,y) 关于参考线、参考点、标注点 横线实现方式: 利用ones(m,n)生成与y相同的纯1向量,再给它乘上你要标注的数 size(y)返回y的行列值对(m,n), 例如标y=0的浅色虚线: >> hold on;plot(x,0*ones(size(y)),'--','LineWidth',1,'color',[100/255,100/255,100/255]); 竖线实现方式: 利用plot()两点成线 plot([x0,x0],[y_min,y_max]); 例如在Pi/2处画从0到1的竖虚线: >> hold on;plot([pi/2,pi/2],[0,1],'--','LineWidth',1,'color',[100/255,100/255,100/255]); 小细节:如果先加图例,图例会把你画的横竖线也标上'data 1','data 2'。如果画完参考线再加legend,legend只会标注标签名数量个数据,就不会出现把参考线也标上的情况。 标注文字:text(x,y,'contents') >> text(pi,0,'\leftarrow sin(\pi)','fontsize',15); 关于多个图 subplot(m,n,index)由matlab根据选定的m行n列自动设置子图尺寸 https://ww2.mathworks.cn/help/matlab/ref/subplot.html或者需要精细化设置位置: %设置当前图窗单位为归一化 >> set(gcf,'color','none','unit','normalized','position',[0,0,1,1]); %设置左下角出现在(0.2,0.22)位置,宽0.55,高0.4 >> positionVector1 = [0.2, 0.55, 0.22, 0.4]; subplot('Position',positionVector) 这里画子图下面的操作和上面都一样,唯一要记住的是,每一个subplot,都相当于一个figure(),这就是说,你在每个subplot下面写的xlabel、title、legend之类的,都只会设置subplot下面的图。 子图示例: %子图一 %设置子图位置 positionVector1 = [0.2, 0.55, 0.22, 0.4]; subplot('Position',positionVector1) %画图 plot(A(:,2),(A(:,1)/1000),'LineWidth',2,'color','black'); %画参考线 hold on;plot(zeros(size(A(:,2))),(A(:,1)/1000),'--','LineWidth',1,'color',[100/255,100/255,100/255]); %设置坐标轴范围 ylim([0 6371]);xlim([-2*max(abs(A(:,2))) +2*max(abs(A(:,2)))]); %画参考线 hold on;plot([-2*max(abs(A(:,2))) +2*max(abs(A(:,2)))],[6371-670 6371-670],'--','LineWidth',1,'color',[100/255,100/255,100/255]) hold on;plot([-2*max(abs(A(:,2))) +2*max(abs(A(:,2)))],[6371-2890 6371-2890],'--','LineWidth',1,'color',[100/255,100/255,100/255]) hold on;plot([-2*max(abs(A(:,2))) +2*max(abs(A(:,2)))],[6371-5150 6371-5150],'--','LineWidth',1,'color',[100/255,100/255,100/255]) %给坐标轴命名 ylabel('r (km)');xlabel('U(r)'); set(gca,'YDir','reverse'); %修改子图线条粗细 set(gca,'LineWidth',3,'fontsize',15); positionVector2 = [0.58, 0.55, 0.22, 0.4]; subplot('Position',positionVector2) plot(A(:,3),(A(:,1)/1000),'LineWidth',2,'color','black'); hold on;plot(zeros(size(A(:,3))),flip(A(:,1)/1000),'--','LineWidth',1,'color',[100/255,100/255,100/255]); ylim([0 6371]);xlim([-2*max(abs(A(:,3))) +2*max(abs(A(:,3)))]) hold on;plot([-2*max(abs(A(:,3))) +2*max(abs(A(:,3)))],[6371-670 6371-670],'--','LineWidth',1,'color',[100/255,100/255,100/255]) hold on;plot([-2*max(abs(A(:,3))) +2*max(abs(A(:,3)))],[6371-2890 6371-2890],'--','LineWidth',1,'color',[100/255,100/255,100/255]) hold on;plot([-2*max(abs(A(:,3))) +2*max(abs(A(:,3)))],[6371-5150 6371-5150],'--','LineWidth',1,'color',[100/255,100/255,100/255]) ylabel('raduis (km)');xlabel('dU(r)/dr'); %set(gca,'YDir','reverse'); set(gca,'LineWidth',3,'fontsize',15); positionVector3 = [0.2, 0.07, 0.22, 0.4]; subplot('Position',positionVector3) plot(zeros(size(A(:,1))),(A(:,1)/1000),'--','LineWidth',1,'color',[100/255,100/255,100/255]); ylim([0 6371]);xlim([-1 1]) hold on;plot([-1 1],[6371-670 6371-670],'--','LineWidth',1,'color',[100/255,100/255,100/255]) hold on;plot([-1 1],[6371-2890 6371-2890],'--','LineWidth',1,'color',[100/255,100/255,100/255]) hold on;plot([-1 1],[6371-5150 6371-5150],'--','LineWidth',1,'color',[100/255,100/255,100/255]) ylabel('raduis (km)');xlabel('V(r)'); %set(gca,'YDir','reverse'); set(gca,'LineWidth',3,'fontsize',15); positionVector4 = [0.58, 0.07, 0.22, 0.4]; subplot('Position',positionVector4) plot(zeros(size(A(:,1))),(A(:,1)/1000),'--','LineWidth',1,'color',[100/255,100/255,100/255]); ylim([0 6371]);xlim([-1 1]) hold on;plot([-1 1],[6371-670 6371-670],'--','LineWidth',1,'color',[100/255,100/255,100/255]) hold on;plot([-1 1],[6371-2890 6371-2890],'--','LineWidth',1,'color',[100/255,100/255,100/255]) hold on;plot([-1 1],[6371-5150 6371-5150],'--','LineWidth',1,'color',[100/255,100/255,100/255]) ylabel('raduis (km)');xlabel('dV(r)/dr');% set(gca,'YDir','reverse'); set(gca,'LineWidth',3,'fontsize',15); %设置总标题 name=['_{' num2str(n) '}S_{' num2str(l) '}'];%latex sgt =sgtitle(name);sgt.FontSize = 30; %加文字 config=[ 'Eigf=' num2str(Eigf) ',Gv=' num2str(Gv) ',Q=' num2str(Q) 'Err=' num2str(Err)]; suptitle(config); %保存图片 I=getimage(gcf); pngname=[ num2str(n) 'S' num2str(l)]; saveas(fullfig,[filepath pngname '.png']); 最后成图: 那么如何给图加标题呢? matlab2020之前有suptitle函数,matlab2020有sgtitle函数,和title函数差不多。 关于三维图 最近没画三维图,有空总结一下。 另外还有画三维图时加colorbar的细节 https://www.mathworks.com/help/matlab/ref/colorbar.html |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |