Matlab自动生成绘图代码

matlab有着强大的绘图能力和科学计算以及仿真计算功能,其中高度可视化定制绘图的能力是其它的工具所不能及的。很多时候我们都并不知道所绘的图什什么样的效果才是最好的,这个时候就可以使用可视化绘图来不断修改图片,从而达到满意的水平。然而如果这个时候背后的数据有所改动,需要重新生成该效果的图片时或者需要批量生成图片时却傻了眼——因为没有生成这种图片的代码!

所幸,matlab提供了自动生成图片代码函数的功能,只需导出函数代码,然后在主程序中调用,即可实现使用不同的数据,得到相同效果的图片。

一、生成图片

首先生成任意一张图片,本次使用一个相对较为复杂的三轴范例。

% x1和y1折线图
x1 = 1:1:10;y1 = rand(1,10);
% x2和y2为散点图
x2 = 2:2:10;y2 = rand(3,5);
% y3取y2散点中每组最大值作为折线图
y3 = max(y2);
% 绘图
plot(x2,y2,'.');
hold on;
plotyy(x1,y1,x2,y3);

生成结果如图所示:

Alt

二、修改图片

点击工具栏上面的show Plot tool and Dock figure按钮,即可进行图片编辑,最终的编辑效果如图所示(随意编辑,效果很烂):

Alt

可以看出(x2,y2)和(x1,y1)是在同一个坐标轴下,而(x2,y3)则在另外一个坐标轴下。

三、导出代码

如图所示,右击图的边缘(这样才会选中整个图),选择show code,即可得到当前图像的函数代码createfigure:

function createfigure(X1, YMatrix1, X2, Y1, Y2)
%CREATEFIGURE(X1, YMATRIX1, X2, Y1, Y2)
%  X1:  vector of x data
%  YMATRIX1:  matrix of y data
%  X2:  vector of x data
%  Y1:  vector of y data
%  Y2:  vector of y data

%  Auto-generated by MATLAB on 03-May-2017 18:18:47

% Create figure
figure1 = figure;

% Create axes
axes1 = axes('Parent',figure1,'YTick',[0 0.2 0.4 0.6 0.8 1],...
    'YColor',[0.494 0.184 0.556]);
%% Uncomment the following line to preserve the X-limits of the axes
% xlim(axes1,[1 10]);
%% Uncomment the following line to preserve the Y-limits of the axes
% ylim(axes1,[0 1]);
box(axes1,'on');
hold(axes1,'on');

% Create multiple lines using matrix input to plot
plot1 = plot(X1,YMatrix1,'Parent',axes1,'MarkerSize',10,'Marker','.',...
    'LineStyle','none',...
    'LineWidth',15);
set(plot1(1),'MarkerFaceColor',[0 0 1],'Marker','o','LineWidth',0.5);

% Create plot
plot(X2,Y1,'Parent',axes1,'MarkerFaceColor',[1 0 1],'Marker','o');

% Create axes
axes2 = axes('Parent',figure1,'HitTest','off','Color','none',...
    'YTick',[0 0.5 1],...
    'YColor',[0.85 0.325 0.098],...
    'YAxisLocation','right',...
    'Position',[0.13 0.11 0.775 0.815]);
%% Uncomment the following line to preserve the X-limits of the axes
% xlim(axes2,[1 10]);
%% Uncomment the following line to preserve the Y-limits of the axes
% ylim(axes2,[0 1]);
hold(axes2,'on');

% Create plot
plot(X1,Y2,'Parent',axes2,...
    'MarkerFaceColor',[0 0.447058826684952 0.74117648601532],...
    'MarkerEdgeColor',[0 0 1],...
    'MarkerSize',10,...
    'Marker','o',...
    'LineWidth',3,...
    'Color',[1 0 0]);

将该代码保存为createfigure.m这个文件,保存在当前目录下。

四、调用代码

根据函数的提示,只需要输入五组数即可。至于五组数是什么呢?可以根据之前坐标轴情况进行判断,也就是说此处输入数据和之前生成的figure还是有点不同的。

根据内部画图代码可能看出,首轴上(X1,YMatrix1)一组,(X2,Y1)是一组,而第二轴上则(X1,Y2)是一组。如此便可以得到下面的主函数调用代码:

createfigure(x2,y2,x1,y1,y3)

一般来说,调用代码的地方需要多想想,因为不太确定输入情况。在一些情况下,会出现数据合并(合并到同一个矩阵中),从而减少函数的参数。这种情况下在主函数中就需要将相应的数据合并,传入其中。

另外,从生成的代码中可以看出,默认注释了关于轴上下界的代码。如果需要的话,取消注释即可。

此条目发表在CODING, 软件安装分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。