0
votes

this one should be really easy to answer, yet I am surprised it is nowhere described:

I have variable data, and often when I simply plot, I get a close-up on the y-axis (x-axis is time and starts always with a zero). So I get y-values from 16-17, but the zero is nowhere to be seen. I know you can give matlab an YLim value, yet sometimes because my data is variable, I get a range from -50-100 in y. If i had specified before that YLim is [0 20] I wouldnt see it at all, which is not what I want. I just always want to have the origin plotted with my data, how do I do that (without a rigid interval like [-1000 1000], since sometimes I have y values from -0,01-0,001 and wouldnt see it)? Please help if you have an idea!

Thanks!

UPDATE 1: perfectly solved!

Follow-up question:

There is one thing I didnt mention: I need to do this for all my 18 subplots. How can I avoid hardcoding it?

2

2 Answers

2
votes

One way to do this is automatically is to use:

ylim([min([y 0]) max([y,0])])

this way, it will start or stop at 0 if 0 is not already in the range of y

or better, if you want to keep the rounded values matlab provides (eg plot on [0,6] and not on [0,5.872]), first plot your data with plot(x,y), then change the ylim values to 0 if needed:

ylim([min([ylim 0]) max([ylim 0])])

1
votes

It's easy to manually modify axis size:

x = 1:10; %/ example x
y = 5 + rand(1,10); %// example y. Values between 5 and 6
plot(x,y) %// do the plot normally
ax = axis; %// get axis size
ax(3) = min(ax(3),0); %// if the y-axis lower limit is positive, make it 0
axis(ax) %// apply new axis size values

This also seems to work: just use

plot([x NaN],[y 0])

That is, include a point with x value set to NaN and y value set to 0. The point doesn't get plotted (because of the NaN value) but it forces the y axis to strech out to 0.