2017-03-25 18 views
2

你能帮我解释为什么这段代码不起作用吗?使用GUIDE脚本打印谱图

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

spectrogram(x,'yaxis'); 

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

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

+0

你能显示实际的GUID E代码? – Suever

+0

@Suever我的指南是近2000行代码,所以请 - 考虑一些干净的GUIDE文件,其中UIpanel1是主要的 – codddeer123

+0

至少显示包含上面的代码的函数 – Suever

回答

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

    或者你可以用鼠标右键调用spectrogram前添加工具栏using GUIDE

  2. 临时增加一个工具来模拟旋转工具,然后删除在调用后spectrogram

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

谢谢,你的答案应该固定在某个地方,因为我已经在MATLAB Central搜索了超过100个链接,并且没有一个关于临时工具箱需要的单词。它现在像一种魅力。 如果你不介意,你还可以看看我的朋友的帖子,关于一些Matlab和音频处理? https://stackoverflow.com/questions/43016646/consonance-superposition-of-recorded-sounds-in-matlab – codddeer123