Matlab App设计人员如何将UIAx调整为与图像相同的大小并手动设置y&x轴值

时间:2019-01-16 17:35:53

标签: matlab matlab-figure

本来我想做的是在应用设计器中本机绘制一张频谱图,但是我被告知这是不可能的。如果是这样,请告诉我! 我目前有一种解决方法,将频谱图存储为图像。我遇到了一些问题,将uiAxes设置为与图像相同的大小,然后将数据轴分别设置为freq(x)和time(y)。这就是我到目前为止 enter image description here,这就是我想要实现的目标。enter image description here我尝试使用[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)

1 个答案:

答案 0 :(得分:0)

最新答案,但是可以,您可以在应用设计器中绘制频谱图。

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

[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)';