Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MATLAB: Plotting Time on Xaxis - overlapping label

Tags:

plot

matlab

I am having difficulties on plotting time on the xaxis. I have some overlapping labels. See below:

plot

This is my code:

time=datenum(0,0,0,0,0,timeinseconds);
labs=1:10:length(time);

figure(3);
plotyy(time,xvalue,time,dens);
datetick('x','HH:MM');
set(gca,'XTick',time(labs),'XTickLabel',time(labs)); 
legend('xval','CDF');
title('Crash on Oct.10 2008 at 15:59pm');
xlabel('Time');

First, why are the labels overlapping with the old ones? And secondly, how I can get the label to rotate 90degrees? I tried some other matlab functions to turn the labels but none seem able to tackle time format labels.

like image 864
Plug4 Avatar asked Apr 14 '26 01:04

Plug4


1 Answers

Calling plotyy you create two axis objects. Your overlap problem does probably come from the fact that you modify only one set of those axis, while leaving the other as it was originally set up.

One option is handling both of the created axis when you call plotyy by:

[AX, H1, H2] = plotyy( time, xvalue, time, dens);

Your first option here is setting up both of the axis, contained within the array of handlers AX, via changing the'XTick' propriety as:

set( AX(1), 'XTick', time(labs), 'XTickLabel', time(labs));
set( AX(2), 'XTick', time(labs), 'XTickLabel', time(labs));

But you also have the option of leaving the labels for the second axis empty, replacing the second line above:

set( AX(1), 'XTick', time(labs), 'XTickLabel', time(labs));
set( AX(2), 'XTick', time(labs), 'XTickLabel', []);

The official documentation of plotyy and Using Multiple X- and Y-Axes can be of further help for you.


If you take a look on the example there, namely, plotyy documentation:

figure
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');

and as you did before, try to modify only the AX(2), which is equivalent to what you got writing gca:

set(AX(2),'XtickLabel',1:0.1:20)

you will observe that the same overlapping error takes place.

With respect to rotating the labels 90 deg, I'm afraid that's not currently supported by Matlab. However, you can probably get that done using one of the available packages on FileExchange. Either xticklabelrotate or Rotate Tick Label could be the one.

like image 76
Drodbar Avatar answered Apr 16 '26 03:04

Drodbar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!