MATLAB | 官方自带的绘图代码生成功能咋用
Posted slandarer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB | 官方自带的绘图代码生成功能咋用相关的知识,希望对你有一定的参考价值。
代码自动生成器我之前也写过,和官方提供的各有优缺,这里这一期讲解一下官方版的咋用哈:
封面图
基本教程
讲一下MATLAB自带的绘图代码生成器咋用哈,假如编写了如下代码:
t=0.01:0.2:3*pi;
hold on
plot(t,cos(t)./(1+t),'LineWidth',2)
plot(t,sin(t)./(1+t),'LineWidth',2)
plot(t,cos(t+pi/2)./(1+t+pi/2),'LineWidth',2)
plot(t,cos(t+pi)./(1+t+pi),'LineWidth',2)
legend
点击 查看→属性编辑器,即可进入属性编辑器,可以自由编辑图形对象的属性:
选中各个图形对象一通乱改即可:
点击 文件→生成代码,存储为绘图函数:
生成的代码长这样:
function createfigure(X1, YMatrix1)
%CREATEFIGURE(X1, YMatrix1)
% X1: plot x 数据的向量
% YMATRIX1: plot y 数据的矩阵
% 由 MATLAB 于 06-Feb-2023 00:20:41 自动生成
% 创建 figure
figure1 = figure;
% 创建 axes
axes1 = axes('Parent',figure1);
hold(axes1,'on');
% 使用 plot 的矩阵输入创建多个 line 对象
plot1 = plot(X1,YMatrix1,'MarkerSize',15,'LineWidth',1,'Parent',axes1);
set(plot1(1),...
'MarkerFaceColor',[0.952941179275513 0.87058824300766 0.733333349227905],...
'Marker','pentagram',...
'Color',[0.584313750267029 0.388235300779343 0.388235300779343]);
set(plot1(2),...
'MarkerFaceColor',[0.756862759590149 0.866666674613953 0.776470601558685],...
'Marker','hexagram',...
'Color',[0.23137255012989 0.443137258291245 0.337254911661148]);
set(plot1(3),...
'MarkerFaceColor',[0.729411780834198 0.831372559070587 0.95686274766922],...
'Marker','^',...
'Color',[0.39215686917305 0.474509805440903 0.635294139385223]);
set(plot1(4),...
'MarkerFaceColor',[0.925490200519562 0.839215695858002 0.839215695858002],...
'Marker','diamond',...
'Color',[0.513725519180298 0.380392163991928 0.482352942228317]);
box(axes1,'on');
hold(axes1,'off');
% 设置其余坐标区属性
set(axes1,'FontName','Cambria','GridLineStyle','-.','LineWidth',1,...
'TickLength',[0.008 0.025],'XGrid','on','XMinorTick','on','YGrid','on',...
'YMinorTick','on');
% 创建 legend
legend1 = legend(axes1,'show');
set(legend1,'FontSize',11);
可以另写个m文件调用,或者直接把调用这段代码的代码加在此文件最前面:
由于输入变量每组数据大小相同,因此直接就是以矩阵数据当作输入变量,每一列代表一组数据因此把之前的代码做如下改写:
t=0.01:0.2:3*pi;
t=t';
% X1: plot x 数据的向量
% YMATRIX1: plot y 数据的矩阵
X1=t;
YMatrix1=[cos(t)./(1+t),sin(t)./(1+t),cos(t+pi/2)./(1+t+pi/2),cos(t+pi)./(1+t+pi)];
createfigure(X1, YMatrix1)
不同数据长度
看了上面的教程很多人就会疑惑,嗯那万一每组数据不一样长咋办,也很简单,首先假设编写了如下代码:
t=0.01:0.2:3*pi;
t2=t(1:2:end);
hold on
plot(t,cos(t)./(1+t),'LineWidth',2)
plot(t2,sin(t2)./(1+t2),'LineWidth',2)
legend
进行修饰并生成代码:
function createfigure(X1, Y1, X2, Y2)
%CREATEFIGURE(X1, Y1, X2, Y2)
% X1: plot x 数据的向量
% Y1: plot y 数据的向量
% X2: plot x 数据的向量
% Y2: plot y 数据的向量
% 由 MATLAB 于 06-Feb-2023 01:11:27 自动生成
% 创建 figure
figure1 = figure;
% 创建 axes
axes1 = axes('Parent',figure1);
hold(axes1,'on');
% 创建 plot
plot(X1,Y1,...
'MarkerFaceColor',[0.952941179275513 0.87058824300766 0.733333349227905],...
'MarkerSize',15,...
'Marker','pentagram',...
'LineWidth',1,...
'Color',[0.584313750267029 0.388235300779343 0.388235300779343]);
% 创建 plot
plot(X2,Y2,...
'MarkerFaceColor',[0.729411780834198 0.831372559070587 0.95686274766922],...
'MarkerSize',15,...
'Marker','square',...
'LineWidth',1,...
'Color',[0.39215686917305 0.474509805440903 0.635294139385223]);
box(axes1,'on');
hold(axes1,'off');
% 设置其余坐标区属性
set(axes1,'FontName','Cambria','FontSize',12,'GridLineStyle','-.',...
'LineWidth',1,'XGrid','on','XMinorTick','on','YGrid','on','YMinorTick','on');
% 创建 legend
legend(axes1,'show');
分成了X1,X2美滋滋:
t=0.01:0.2:3*pi;
t2=t(1:2:end);
createfigure(t,cos(t)./(1+t), t2,sin(t2)./(1+t2))
奇奇怪怪的area\\bar
area函数bar函数这类本来就比较适合输入变量为矩阵的函数对于不等长的输入变量就极其不友好,尝试了多种输入变量构造格式,发现还是直接把生成函数改了比较方便(此处仅仅针对每组数据不等长情况,要是等长还是该咋画咋画):
假设编写了输入变量不等长基础绘图函数:
t=0.01:0.2:3*pi;
t2=t(1:2:end);
hold on
area(t,cos(t)./(1+t))
area(t2,sin(t2)./(1+t2))
legend
生成代码后发现并不像plot函数一样更多输入变量:
function createfigure(X1, ymatrix1)
%CREATEFIGURE(X1, ymatrix1)
% X1: area x
% YMATRIX1: area 矩阵数据
% 由 MATLAB 于 06-Feb-2023 00:53:40 自动生成
% 创建 figure
figure1 = figure;
% 创建 axes
axes1 = axes('Parent',figure1);
hold(axes1,'on');
% 使用 area 的矩阵输入创建多行
area1 = area(X1,ymatrix1,'FaceAlpha',0.5,'EdgeAlpha',0.7,'LineWidth',1);
set(area1(2),'FaceColor',[0.6 0.6 1]);
set(area1(1),'FaceColor',[1 0.6 0.6]);
box(axes1,'on');
hold(axes1,'off');
% 设置其余坐标区属性
set(axes1,'FontName','Cambria','FontSize',12,'GridLineStyle','-.',...
'LineWidth',1,'XGrid','on','XMinorTick','on','YGrid','on','YMinorTick','on');
% 创建 legend
legend(axes1,'show');
对其进行改写并调用(期待未来会发展的更好叭):
t=0.01:0.2:3*pi;
t2=t(1:2:end);
createfigure(t,cos(t)./(1+t),t2,sin(t2)./(1+t2))
function createfigure(X1,Y1,X2,Y2)
% 创建 figure
figure1 = figure;
% 创建 axes
axes1 = axes('Parent',figure1);
hold(axes1,'on');
% 使用 area 的矩阵输入创建多行
area1(1)= area(X1,Y1,'FaceAlpha',0.5,'EdgeAlpha',0.7,'LineWidth',1);
area1(2)= area(X2,Y2,'FaceAlpha',0.5,'EdgeAlpha',0.7,'LineWidth',1);
set(area1(2),'FaceColor',[0.6 0.6 1]);
set(area1(1),'FaceColor',[1 0.6 0.6]);
box(axes1,'on');
hold(axes1,'off');
% 设置其余坐标区属性
set(axes1,'FontName','Cambria','FontSize',12,'GridLineStyle','-.',...
'LineWidth',1,'XGrid','on','XMinorTick','on','YGrid','on','YMinorTick','on');
% 创建 legend
legend(axes1,'show');
end
当然bar函数也是一样的改法:
t=0.01:0.2:3*pi;
t2=t(1:2:end);
createfigure(t,cos(t)./(1+t),t2,sin(t2)./(1+t2))
function createfigure(X1,Y1,X2,Y2)
% 创建 figure
figure1 = figure;
% 创建 axes
axes1 = axes('Parent',figure1);
hold(axes1,'on');
% 使用 bar 的矩阵输入创建多行
bar1(1) = bar(X1,Y1,'LineWidth',1,'FaceAlpha',0.5,'EdgeAlpha',0.7);
bar1(2) = bar(X2,Y2,'LineWidth',1,'FaceAlpha',0.5,'EdgeAlpha',0.7);
set(bar1(2),'FaceColor',[0.6 0.6 1]);
set(bar1(1),'FaceColor',[1 0.6 0.6]);
box(axes1,'on');
hold(axes1,'off');
% 设置其余坐标区属性
set(axes1,'FontName','Cambria','FontSize',12,'GridLineStyle','-.',...
'LineWidth',1,'XGrid','on','XMinorTick','on','YGrid','on','YMinorTick','on');
% 创建 legend
legend(axes1,'show');
end
其他图形对象
随便举点例子,比如带等高线的曲面图:
X=linspace(0,1,200)';
CL=(-cos(X*2*pi)+1).^.2;
r=(X-.5)'.^2+(X-.5).^2;
surfc(X,X',abs(ifftn(exp(7i*rand(200))./r.^.9)).*(CL*CL')*30)
set(gca,'ZLim',[-90,90]);
修饰生成代码一气呵成:
function createfigure(xdata1, ydata1, zdata1)
%CREATEFIGURE(xdata1, ydata1, zdata1)
% XDATA1: surface xdata
% YDATA1: surface ydata
% ZDATA1: surface zdata
% 由 MATLAB 于 06-Feb-2023 01:33:59 自动生成
% 创建 figure
figure1 = figure;
% 创建 axes
axes1 = axes('Parent',figure1);
hold(axes1,'on');
% 创建 surf
surf(xdata1,ydata1,zdata1,'Parent',axes1,'EdgeAlpha',0.05,...
'EdgeColor',[1 1 1]);
% 创建 contour
contour(xdata1,ydata1,zdata1,'LineWidth',1,'EdgeAlpha',0.3,...
'ZLocation','zmin');
% 取消以下行的注释以保留坐标区的 Z 范围
zlim(axes1,[-90 90]);
view(axes1,[-37.5 39.2089494163424]);
grid(axes1,'on');
hold(axes1,'off');
% 设置其余坐标区属性
set(axes1,'Colormap',...
[0.2422 0.1504 0.6603;0.2444 0.1534 以上是关于MATLAB | 官方自带的绘图代码生成功能咋用的主要内容,如果未能解决你的问题,请参考以下文章