MATLAB - 保持不同数字之间的子图(已解决,但可能在版本R2012a上有问题)

时间:2014-11-13 21:15:28

标签: matlab matlab-figure subplot

我是MATLAB的新手,我一直在寻找我想做的事情,但结果并不合适。

我绘制了传递函数变化的图表,我所做的代码如下:

omega = 3;
K = omega * omega;

for zeta = 0.1:0.1:2
    sys = tf(K,[1 2*zeta*omega omega]);
    figure();
    subplot(1,2,1);
    step(sys);
    title('Step response');

    [num,den] = tfdata(sys, 'v');
    disp(den);
    r = roots(den);
    subplot(1,2,2);
    %hold (subplot(1,2,2), 'on');
    plot(real(r), imag(r), 'o');
    title('Pole Locations in Complex Plane');
end

每次循环运行时,它都会创建一个新的数字。第一个子图对于每个图都应该是唯一的,但是第二个子图应该从它之前的图中绘制所有点(所有传递函数的分母的根)的累积。我尝试使用hold (subplot(1,2,2), 'on');来保留第二个子图,但它没有用。我的想法是因为子图是不同的数字,所以hold on不能使用。

我该如何解决这个问题?任何帮助都会很棒。

1 个答案:

答案 0 :(得分:3)

解决方案是在子图中使用“标记”。我正在使用您的代码进行编辑:

omega = 3;
K = omega * omega;

for zeta = 0.1:0.1:2
    sys = tf(K,[1 2*zeta*omega omega]);
    figure();
    sb = subplot(1,2,1);
    set(sb, 'Tag', 'daddy')  % Something to tag with -  memorable
    step(sys);
    title('Step response');

    [num,den] = tfdata(sys, 'v');
    disp(den);
    r = roots(den);

    sb = subplot(1,2,2);
    set(sb, 'Tag', 'child')
    sb = findobj('Tag','child'); % Use MATLAB methods to find your tagged obj

    set(sb,'NextPlot','add'); % set 'NextPlot' property to 'add'

    plot(real(r), imag(r), 'o');
    title('Pole Locations in Complex Plane');
end

这对你有用吗?顺便说一句。这也在MATLAB central。你也应该使用它。