8

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);
4

1 回答 1

4

spectogram生成 asurf并将其设置view(0,90)。将surf设置zlim为一些值(取决于spectrogram数据),显然,在当前绘图中添加一条线不会改变zlim(可能是因为以spectrogram某种方式锁定了轴;应该可以在 中找到edit spectrogram)。因此,在 中view(0,90),线条完全消失(旋转绘图;您会看到线条出现在表面上方的某处)。

解决方法:添加线的方式默认为 -z坐标为的线[0 0],对于许多spectrograms,该线将高于设置的轴范围spectrogram

发行

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

之后line应该使该行出现。

另外:就我而言,线悬停的表面大部分是蓝色的,线也是如此。这无助于让它明显有一条线:) 我把它设为白色,与surf下面的蓝色/黄色/红色形成鲜明对比。

于 2012-11-13T06:20:06.753 回答