我正在应用程序设计器上创建一个 UI,我想在我的 UI.axes 中绘制一个 bode。
该图包含两个图(幅度、相位),我想要做的是在不同的 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');
这段代码给了我这两个单独的图:
我正在尝试将这些图插入到我的应用程序中的两个不同的 ui 轴中。
有人对如何插入绘图有想法或另一种方法吗?
注意:我已经尝试过以下方法:-
您可以使用 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];
%% 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)