在 Matlab 应用程序设计器的 UI 轴内绘制波德图

问题描述 投票:0回答:2

我正在应用程序设计器上创建一个 UI,我想在我的 UI.axes 中绘制一个 bode。

enter image description here

该图包含两个图(幅度、相位),我想要做的是在不同的 ui.axes 中绘制每个图。

我使用以下代码成功地仅绘制了 幅度伯德相位伯德 :

clc;
clear all;

num = [2];
den = [conv([1 1], conv([1 1], [1 1]))];
sys = tf(num, den);

[mag, phase, freq] = bode(sys, {0.1, 100});
bodemag(sys, freq)

h = bodeplot(sys, freq);
setoptions(h,'MagVisible','off');

这段代码给了我这两个单独的图:

enter image description here

enter image description here

我正在尝试将这些图插入到我的应用程序中的两个不同的 ui 轴中。

有人对如何插入绘图有想法或另一种方法吗?

注意:我已经尝试过以下方法:-

  • 直接将代码写入应用程序设计器,但它会创建一个 弹出窗口
  • 使用 plot(app.UiAxes, ...., ....) 函数,但我似乎无法使其工作
matlab matlab-figure matlab-guide matlab-app-designer
2个回答
0
投票

您可以使用 app.UIAxes 展示来自 appdesigner 的代码吗? 您使用哪个 Matlab 版本? 据我所知,旧版本的 UIAxes 不支持子图。所以你必须制作两个 UIAx 或使用更新的版本。

如果您直接向 appdesigner 编写代码,您将创建一个轴。 UIAxes 和 Axes 对象之间存在差异。如果您想使用 Axes,您必须设置更多属性才能使其显示在应用程序的 UIFigure 中。 你试过这个吗? 我不知道UIAxes是否支持bodemag功能。如果它不适用于 UIAxes,这可能是有意义的。

bode = bodemag(app.UIAxes,sys, freq);

如果 UIAxes 不支持 bodemag,那么您必须使用普通轴来实现,并对该轴的定位进行编码。 这是如何做到这一点的一个很好的例子。:https://de.mathworks.com/help/matlab/creating_guis/polar-plotting-app-gui-in-app-designer.html

这就是需要额外添加的部分。

            % Create polar axes and position it in pixels
            app.Pax = polaraxes(app.UIFigure);
            app.Pax.Units = 'pixels';
            app.Pax.Position = [260 55 230 230];

0
投票

appdesigner 中的预兆

        %% Bode Magnitude Plot  %%
        optMAG=bodeoptions;
        optMAG.PhaseVisible='off';
        bodeplot(app.BodeMagAxes,H,optMAG)

        %% Bode Phase Plot  %%
        opt=bodeoptions;
        opt.MagVisible='off';
        bodeplot(app.BodePhaseAxes,H,opt)
© www.soinside.com 2019 - 2024. All rights reserved.