Draw vertical lines on matlab spectrogram plot

matlab, user-interface

Solution

The `spectogram` generates a `surf` and sets the `view` to `(0,90)`. The `surf` sets the `zlim` to some values (dependent on the `spectrogram` data), and apparently, adding a line to the current plot does not change the `zlim` (probably because `spectrogram` locked the axes somehow; should be findable in `edit spectrogram`). Therefore, in `view(0,90)`, the line completely disappears (rotate the plot; you'll see the line appear somewhere above the surface).

To resolve: the way you add a line defaults to the line having `z`-coordinates of `[0 0]`, which, for many `spectrogram`s, will be above the range of the axes set by `spectrogram`.

Issuing

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

after the `line` should then make the line appear.

Also: in my case, the surface over which the line was hovering was mostly blue, as was the line. This doesn't help making it apparent there is a line :) I made it white, which contrasted better with the blue/yellow/red `surf` below.

Problem

Does the matlab spectrogram function lock the created figure in anyway? I want to draw vertical lines on the figure but the line function does not seem to do anything. How can I draw a line on a matlab spectrogram? ``` 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); ```

Original source