首页 > 解决方案 > Matlab App设计师如何将UIAxes调整为与图像相同的大小并手动设置y&x轴值

问题描述

最初我试图做的是在应用程序设计器中本地绘制一个频谱图,但是我被告知这是不可能的。如果是这样,请告诉我!目前我有一个解决方法,将光谱图存储为图像。在将 uiAxes 设置为与图像相同的大小,然后将数据的轴分别设置为 freq(x) 和 time(y) 时,我遇到了一些问题。这是我到目前为止所拥有 在此处输入图像描述的,也是我想要实现的。在此处输入图像描述我尝试使用 [h,w,d]= size(Image) 查找图像的大小,但这只会返回 1,1,1。我也不知道如何将轴分别设置为时间和频率,并使其与图像对齐。这是我生成频谱图的代码

ax = uiaxes(app.UIFigure,"Position",app.UIAxes.Position);
[S,F,T] = spectrogram(y,256,200,256,app.fs);
z=imagesc(ax, T, F, log(abs(S'))); %plot the log spectrum`
[height,width,depth]=size(z)
ax.Position=[113,99,width,height];
 set(ax,'YDir', 'normal');
 plot(F,T);
colorbar(ax)

标签: matlabmatlab-figure

解决方案


迟到的答案,但是是的,您可以在应用程序设计器中绘制频谱图。

下面是我使用的代码片段。

[s,f,t] = spectrogram(app.Bx.Data,512,50,512,app.Frequency);
imagesc(app.UIAxesPSBx,t,f,log(abs(s)));
app.UIAxesPSBx.View = [90 90];
app.UIAxesPSBx.YLim = [0 (app.Frequency/2)];
app.UIAxesPSBx.YLabel.String = 'Frequency (Hz)';
app.UIAxesPSBx.XLim = [0 (app.DataLength/app.Frequency)];
app.UIAxesPSBx.XLabel.String = 'Time (UTC)';
colorbar(app.UIAxesPSBx, 'Color',[0.8 0.8 0.8]);

请记住,您更改了 UI 轴的视角,因此如果要将其更改为 Welch 功率谱密度,则需要如下更改视角。

[pxx,f] = pwelch(app.Bx.Data,[],[],[],app.Frequency);
line(app.UIAxesPSBx,f,10*log10(pxx),'Color',[0.27 0.87 1], 'LineWidth',0.8);
app.UIAxesPSBx.View = [0 90];
app.UIAxesPSBx.YLimMode = 'auto';
app.UIAxesPSBx.XLimMode = 'auto';
colorbar(app.UIAxesPSBx,'off');
app.UIAxesPSBx.XLabel.String = 'Frequency (Hz)';
app.UIAxesPSBx.YLabel.String = 'Power/frequency (dB/Hz)';

推荐阅读