输入结构元素到matlab plot()作为参数

时间:2016-03-31 19:42:40

标签: matlab matlab-figure

我有20-40个离散数字可以在Matlab程序中创建和保存。我正在尝试创建一个函数,它允许我输入元素(图像,线条,向量等)并通过将每个元素传递给for循环中的plot()来创建分层图:

function [  ] = constructFigs( figTitle, backgroundClass, varargin )

fig = figure('visible', 'off');

if strcmp(backgroundClass, 'plot') == 1

    plot(varargin{1});

elseif strcmp(backgroundClass, 'image') == 1

    imshow(varargin{1});

end


for i = 1:length(varargin)

    hold on

    if ndims(varargin{i}) == 2

        plot(varargin{i}(:, 1), varargin{i}(:, 2))

    else

        plot(varargin{i});

    end

end

saveas(fig, figTitle);

close(fig);

end

此功能有效但在绘制的内容方面非常有限;您无法执行某些类型的绘图操作(例如叠加图像),也无法将可选参数传递给plot()。我想要做的是传递要绘制的元素结构,然后将这些结构元素作为参数传递给plot()。例如(简化和语法错误):

toBePlotted = struct('arg1', {image}, 'arg2', {vector1, vector2, 'o'})


    plot(toBePlotted.arg1)
    plot(toBePlotted.arg2)

我能够以编程方式构造具有参数名称的结构,但是我无法以图表将接受它们作为参数的方式从结构中提取元素。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

对于您的用例,您需要使用单元格展开{:}来填充输出以进行绘图

plot(toBePlotted.arg1{:})
plot(toBePlotted.arg2{:})

这会将单元格数组toBePlotted.arg1中包含的元素扩展为plot的单独输入参数。

另一种选择是使用line而不是plot(较低级别的图形对象)并将构造函数传递给一个更易理解的结构,其中包含您要用于该结构的所有参数曲线图。

s = struct('XData', [1,2,3], 'YData', [4,5,6], 'Marker', 'o', 'LineStyle', 'none');
line(s)

老实说,在程序中进行绘图可能要容易得多,而不是单独使用函数,因为函数中没有使用很多自定义参数。

如果您真的想要一些简化的绘图,那么可以做这样的事情:

function plotMyStuff(varargin)

    fig = figure();
    hold on;

    for k = 1:numel(varargin)

        params = rmfield(varargin{k}, 'type');

        switch lower(varargin{k}.type)
            case 'line'
                line(params);
            case 'image'
                imagesc(params);
            otherwise
                disp('Not supported')
                return
        end 
    end

    saveas(fig);
    delete(fig);
end

plotMyStuff(struct('XData', [1,2], 'YData', [2,3], 'type', 'line'), ...
            struct('CData', rand(10), 'type', 'image'));