2012-11-13 41 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