在模型阵列图中着色不同的模型(Matlab)

时间:2014-03-10 20:42:57

标签: matlab plot

我想用Matlab的控制工具箱在单个图中可视化不同系统的不同响应,并对各种曲线进行着色,以便很容易区分不同的系统。

使用控制工具箱可以轻松创建响应图 - 例如步骤响应(使用step),对任意输入的响应(使用lsim)等。

当为不同的系统使用单独的模型对象时,很容易创建多色图,例如,对于阶跃响应:step(Sys1, 'b', Sys2, 'r')将给出一条蓝色曲线和一条红色固化,如果Sys1和Sys2都是单一系统模型。

但是,如果绘制模型数组,则无法区分属于同一数组的各种曲线。例如:step(SysArray, 'b')会使所有曲线变为蓝色。 step(Sys,'b','r')无效 - 因此没有简单的方法来指定各种颜色。 此外,使用“编辑绘图”工具,选择一条曲线可以有效地选择所有曲线,对属性的任何更改(例如线条颜色)都会影响所有曲线。

有没有办法分别控制每条曲线的属性?

2 个答案:

答案 0 :(得分:0)

没有内置功能可以执行此操作,因此您必须滚动自己的功能

% Create n-by-3 array of colours to use
coloursArray = rand(numel(stackedSystems),3); % for this example put in random colours
% Do the plot
step(stackedSystems);
title('My custom title');
grid on
% Change colours
ha = findobj(gcf,'type','axes','visible','on'); % Get handles of all axes (for MIMO responses)
for jdx = 1:numel(ha)
   hl = findobj(ha(jdx),'type','line','visible','on'); % Get handles to all lines
   for idx = 1:numel(hl)
       set(hl(idx),'Color',coloursArray(idx,:));  %  Change the colour
   end
end

答案 1 :(得分:0)

@Phil Goddard

  

没有内置功能可以执行此操作,因此您必须滚动您的   拥有功能

% Create n-by-3 array of colours to use
coloursArray = rand(numel(stackedSystems),3); % for this example put in random colours
% Do the plot
step(stackedSystems);
title('My custom title');
grid on
% Change colours
ha = findobj(gcf,'type','axes','visible','on'); % Get handles of all axes (for MIMO responses)
for jdx = 1:numel(ha)
   hl = findobj(ha(jdx),'type','line','visible','on'); % Get handles to all lines
   for idx = 1:numel(hl)
       set(hl(idx),'Color',coloursArray(idx,:));  %  Change the colour
   end
end

感谢您的代码! 以下是一些细微的变化,可以通过参数变化(包括颜色条)进行模型采样。 我希望它也适用于pzmap,但是它创建了2 * n行(极点和零点),因此需要更多的工作。

function colorSamplingPlot(values,var)
% values is an array with parameter value assigned to each curve
% var is a string for the colorbar label

n = numel(findobj(gca,'type','line','visible','on'));

% Create n-by-3 array of colours to use
coloursArray = colormap(jet(n));

% Change colours
% Get handles of all axes (for MIMO responses)
ha = findobj(gcf,'type','axes','visible','on');

for jdx = 1:numel(ha)

    % Get handles to all lines
    hl = findobj(ha(jdx),'type','line','visible','on');

    for idx = 1:numel(hl)

        %  Change the color; inverted color order to match colorbar
        set(hl(idx),'Color',coloursArray(numel(hl)-idx+1,:));
    end
end

colorbar;
caxis([min(values),max(values)]);

hcb = colorbar;
hcb.Label.String = vars;

end