2012-11-13 39 views
8

matlab频谱图函数是否锁定创建的图形?我想在图上绘制垂直线,但是线功能似乎没有做任何事情。我如何在matlab声谱图上绘制一条线?在matlab声谱图上绘制垂直线

clc; clear all; close all; 
[data, fs, nbits] = wavread(<INSERT WAVE FILE HERE>); 
% [data, fs, nbits] = wavread('white_0.05_6sec_aud.wav'); 


N_data=length(data); N_frame=128; N_half=N_frame/2; N_loop=N_data/(N_half); 
output=zeros(N_data,1); 
hz=0:(fs/2)/N_half:(fs/2)-(fs/2)/N_half; 

spectrogram(data, hanning(N_frame), N_half, N_frame, fs); 

x = [6500 6500]; 
y = [0 5.5]; 

H = gca; 

% set(gca, 'NextPlot', 'add'); 
% line(x, y); 

h = line([6500, 6500], [0, 5.5]); 
set(h, 'parent', handles.predicted_ax); 

% view(-90,90) 
% set(gca,'ydir','reverse') 
% 
% [y, x] = ginput(1) 


% view(-90, 180); 
+1

你有一些代码可以创建我们可以测试的谱图吗? –

+0

我只是使用光谱图()函数,但是我已经将我的代码添加到问题中。请根据需要评论并取消注释画线功能;他们似乎没有在这里做任何事 – user13267

+0

我可以通过摆脱传递给'spectrogram'(奇怪)的额外选项并且用随机噪声(真奇怪)替换真实数据来使这个代码工作。 – Isaac

回答

4

spectogram产生surf并设置view(0,90)。该surfzlim一定值(取决于spectrogram数据),显然,添加一行到当前图不改变zlim(可能是因为spectrogram锁定轴莫名其妙;应该在edit spectrogram容易找到)。因此,在view(0,90)中,线条完全消失(旋转绘图;您会看到线条出现在曲面上方某处)。

要解决:添加一个线默认为具有z坐标 - 的[0 0], 其中,对于许多spectrogram S,将通过spectrogram设置的轴的上述范围中的线的方式。

发行

zl = zlim; 
axis([xlim ylim zl(1) max(0, zl(2))]) 
view(0,90) 
line

则应该行出现。

另外:在我的情况下,线路盘旋的表面大部分是蓝色的,线条也是如此。这没有帮助使它明显有一条线:)我做它是白色的,这与下面的蓝色/黄色/红色surf对比更好。

+0

非常感谢!!!!!我不明白有关surfs和zlim的所有细节,但是您的代码会使该行出现 – user13267

+0

非常奇怪。在来到这里之前,我尝试使用plot3()创建一个z值非常高的行,但它不起作用,但是这样做了.Kudos和+1。 – neuronet