奈奎斯特图中箭头的大小增加?

时间:2017-05-02 14:13:29

标签: matlab matlab-figure

有没有人知道如何增加由MATLAB控制系统工具箱生成的奈奎斯特图中的箭头大小(同时保持线宽和图中的其他所有内容相同)?

1 个答案:

答案 0 :(得分:4)

  

我注意到您还在MATLAB中询问了the same question   中央。如果,请确保将其他访问者推荐给此答案   你发现它很有用。

首先是坏消息

MATLAB控制系统工具箱提供函数nyquistnyquistplot来绘制动态系统模型频率响应的奈奎斯特图。

即使这些功能允许a certain level of graphical customization(单位,网格,标签和基本LineSpec),它们也不允许更改奈奎斯特图中默认显示的箭头大小(您可以详细了解此herehere)。

好消息(时间来破解!)

我开始探索奈奎斯特情节图的对象层次结构,并意识到绘制的箭头是patch个对象。

我是怎么注意到的?

首先,我生成了一个样本奈奎斯特图:

sys = tf([2 5 1],[1 2 3]);    % System transfer function.
nyquist(sys);                 % Nyquist plot.

Nyquist plot with default arrows

然后我进行了蛮力测试!

以下测试遍历奈奎斯特绘图图窗口的每个graphics object并在每次迭代中闪烁一个元素。通过这种方式,当它们开始闪烁时,我能够直观地识别链接到箭头的对象。

h = findall(gcf);   % Find all graphics objects including hidden ones.
t = 0.5;            % Time interval.

for i = 1:length(h) % Loop through every object handle.
    disp(i);        % Display handle array index.
    pause(t);       % Pause for t seconds.
    status = h(i).Visible;      % Copy Visible property.
    if strcmp(status, 'on')     % If Visible = 'on' --> Visible = 'off'
        h(i).Visible = 'off';
    else                        % If Visible = 'off' --> Visible = 'on'
        h(i).Visible = 'on';
    end
    pause(t);               % Pause for t seconds.
    h(i).Visible = status;  % Restore original Visible property.
    pause(t);               % Pause for t seconds.
end
disp('Finished!');  % Display Finished!

运行此测试后,我发现h(196)h(197)是奈奎斯特情节的两个箭头,它们是patch个对象。

更改'LineWidth'属性是下一个合乎逻辑的步骤。为了更改箭头的大小,您需要完成以下代码:

sys = tf([2 5 1],[1 2 3]);    % System transfer function.
nyquist(sys);                 % Nyquist plot.

h = findall(gcf, 'Type', 'Patch');  % Find all patch objects.

for i = 1:length(h)         % Loop through every patch object handle.
    h(i).LineWidth = 4;     % Set the new LineWidth value.
end

结果如下:

Nyquist plot with larger arrows

我希望你喜欢冒险! :d