Make informative x-axis labels for long term spectrogram plot

6 vues (au cours des 30 derniers jours)
Louise Wilson
Louise Wilson le 4 Nov 2019
Commenté : Eric Sofen le 2 Oct 2020
I have a spectrogram which spans one month worth of 2 minute recordings. Instead of labelling each two minute recording on the x-axis, I'd like to group the x-axis tick labels by day, so that the data is more readable and informative.
So far, I have converted each serial datenumber in my data to a date, but I am having trouble applying this to the data. I then tried to do this manually but that hasn't worked either.
Any tips much appreciated!
%% Time-domain plot (spectrogram)
figure(1); clf; set(figure(1),'color','w'); hold off;
%produce figure with axes
surf(t,f,A','FaceColor','interp',...
'EdgeColor','none','FaceLighting','phong');
%surf(x,y,Z);
%x corresponds to columns of z (time)
%y corresponds to rows (frequency)
%A is transposed in third input to meet requirements of surf
%Plot uses x and y as coordinates-at x(time) and y(freq), what is A?
axis tight
view(0,90);
set(gca,'tickdir','out','layer','top','fontname',... %change size of axes
'arial','fontsize',14);
%set(gca,'YScale','log'); %set y-axis scale to logarithmic
ylabel('Frequency [ Hz ]','fontsize',14);
c = colorbar; %insert colour bar
colorTitleHandle = get(c,'Title');
titleString = 'PSD [ dB re 1 uPa^2 Hz^-^1 ]';
set(colorTitleHandle ,'String', titleString,'Rotation',270,...
'Position',[60 300 2]); %positions colorbar axis
set(colorTitleHandle, 'fontsize', 14); %change colourbar font size
caxis([40 100]); % sets scale on colour bar
xlabel('Time','fontsize',14);
days=datetime(t,'ConvertFrom','datenum'); %group datenum values into day of month
days=day(days);
xticks(days); %I get an error here which says 'value must be a vector of type single or double whose values increase'
timestamps=[1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;
27;28;29;30;31];
xticks(timestamps)
xticklabels({'01-16','02-16','03-16','04-16','05-16','06-16','07-16','08-16',
'09-16','10-16','11-16','12-16','01-17','02-17','03-17','04-17','05-17',
'06-17','07-17','08-17','09-17','10-17','11-17','12-17'})
xlabel('Date (MM-YY)')
gi.jpg
  4 commentaires
Arthur Batte
Arthur Batte le 25 Juil 2020
louise how did u exactly do it?
Eric Sofen
Eric Sofen le 2 Oct 2020
It looks like you found a solution, but FYI, most MATLAB plot types support plotting datetime and duration directly, so instead of overwriting the xticks and the labels, you could do (referring to the variable names in your code above)
surf(days,f,A',...

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Dates and Time dans Help Center et File Exchange

Produits


Version

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by