在Matlab的谱图上画出垂直线

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

1
你有一些可以用来测试的创建频谱图的代码吗? - Fantastic Mr Fox
我只是在使用spectrogram()函数,但是我已经将我的代码添加到问题中。请根据需要注释或取消注释绘图功能;它们似乎在这里没有起作用。 - user13267
我可以通过去掉传递给“spectrogram”的额外选项(奇怪)以及用随机噪声替换真实数据(非常奇怪)来使这段代码工作。 - Isaac
“额外选项”是什么意思?对于我的工作,函数spectrogram()的倒数第二个参数应该与上面所示的完全相同,这与它们的默认值不同。因此,我必须让它按照上面显示的参数工作。我真正想知道的是,spectrogram()函数是否锁定了图形或轴,以便不能在其上绘制其他内容,如果是,如何解锁它。 - user13267
1个回答

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

解决办法:添加线的方法默认将该线具有[0 0]的“z”坐标, 对于许多“spectrogram”,这将高于由“spectrogram”设置的轴范围。

发行:

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

line之后,应该出现该行。

另外,在我的情况下,线条悬停的表面大多是蓝色的,就像线条一样。这并没有帮助让人们看到有一条线 :)我把它变成了白色,这与下面的蓝色/黄色/红色surf形成更好的对比。


非常感谢!!!我不是很理解surfs和zlim的所有细节,但是你的代码让线条出现了。 - user13267
非常奇怪。在来这里之前,我尝试使用plot3()创建一个z值极高的线条,但它没有起作用,但是这个方法解决了问题。赞和+1。 - eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接