我想用Matlab的控制工具箱在单个图中可视化不同系统的不同响应,并对各种曲线进行着色,以便很容易区分不同的系统。
使用控制工具箱可以轻松创建响应图 - 例如步骤响应(使用step
),对任意输入的响应(使用lsim
)等。
当为不同的系统使用单独的模型对象时,很容易创建多色图,例如,对于阶跃响应:step(Sys1, 'b', Sys2, 'r')
将给出一条蓝色曲线和一条红色固化,如果Sys1和Sys2都是单一系统模型。
但是,如果绘制模型数组,则无法区分属于同一数组的各种曲线。例如:step(SysArray, 'b')
会使所有曲线变为蓝色。 step(Sys,'b','r')
无效 - 因此没有简单的方法来指定各种颜色。
此外,使用“编辑绘图”工具,选择一条曲线可以有效地选择所有曲线,对属性的任何更改(例如线条颜色)都会影响所有曲线。
有没有办法分别控制每条曲线的属性?
答案 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