使用GUIDE脚本

时间:2017-03-25 17:29:57

标签: matlab matlab-figure matlab-guide

你能帮我解释为什么这段代码不起作用吗?

freq = 440;
samples = 0:1/44100:1.4;
x = sin(2*pi*freq*samples);
axes(handles.uipanel1);

spectrogram(x,'yaxis');

我想在某个特定的UIpanel中打印(某种程度上)频谱图,但我无法做到这一点。此代码在单独的.m文件中正常工作,但不在我的GUIDE脚本中 - 显示空标准图和错误:“非结构数组对象的结构内容引用。”

另外,我想独立打印这个频谱图 - 不是通过任何类型的按钮,只是在开始时打印。它应该分配给任何类型的uipanel1_Callback或OpeningFcn吗?

1 个答案:

答案 0 :(得分:3)

问题是spectrogram函数需要图形工具栏可见,因为它试图获取3D旋转工具的句柄。它检查工具是否实际存在,这会导致您的错误。

hRotate = uigettool(ancestor(h,'Figure'),'Exploration.Rotate');
if strcmp(hRotate.State,'off')

在我看来,这是MATLAB中的一个错误。

您可以选择:

  1. 将标准图形工具栏添加到GUI。您可以在OpeningFcn中以编程方式执行此操作,以便spectrogram可以找到它

    set(handles.hfig, 'Toolbar', 'figure')
    

    或者您可以添加工具栏using GUIDE

  2. 在调用spectrogram之前暂时添加一个模仿旋转工具的工具,然后在调用spectrogram后删除它

    htoolbar = uitoolbar('Parent', ancestor(hObject, 'figure'));
    uitoggletool('Parent', htoolbar, 'Tag', 'Exploration.Rotate', 'State', 'off');
    
    spectrogram(...)
    
    % Delete the toolbar
    delete(htoolbar)