set number of ticks at any given time

68 views (last 30 days)
hi,
i am searching for something to set the amunt of ticks to a fix value of a plot.
the reason is, right now im plotting live data and the plot constantly changes the number of ticks and therefore the space inbetween, wich makes it harder to read than necessary.
now i know that i can change XTick to values of my liking, but when i do, i also have to change them all the time in the loop, so my tought was to simply change the amount of xticks. however, i couldnt find a solution. i am using animatedline, does that make a difference?
sincerely
Andre

Accepted Answer

Steven Lord
Steven Lord on 20 Jun 2023
If you know the bounds over which your data to be plotted spans, I would set those limits first using axis or xlim and ylim (and set the ticks and tick labels with xticks, xticklabels, etc.) then addpoints to your animatedline. Doing so means that the axes will not need to recalculate its limits to include the new points and so the ticks won't need to change during the plotting.
Run the following two sections of code and watch the plotting. The first doesn't need to change the limits at all once the axes is created by the axis call. The second updates the limits with each new point. [The effect in MATLAB Answers is the same, since it only shows the final results, but in an interactive MATLAB session you will be able to see the difference.]
With axes limits set initially:
x = 0:10;
y = x.^2;
[minX, maxX] = bounds(x);
[minY, maxY] = bounds(y);
axis([minX maxX minY maxY])
h = animatedline(NaN, NaN);
for k = 1:numel(x)
addpoints(h, x(k), y(k));
pause(1)
end
Without axes limits set initially:
figure
h = animatedline(NaN, NaN);
for k = 1:numel(x)
addpoints(h, x(k), y(k));
pause(1)
end
  4 Comments
Andre
Andre on 21 Jun 2023
it has a "pseudo" maximum. its in a for loop and each loop, data is being collected. and i have the same problem as in the last example, its just not at the beginning and instead at the end.
when i want to collect like 1000 data points, i start with like a range from 0 to 20, but i would end with a range of 980 to 1000. so that i always have 21 values displayed. maybe it would be fine with matlab always recalculating where the ticks are located, but at least the number would variate that drastically. i also limit the values in animatedline, so i dont have a plot with thousands and thousands of values. maybe that was the wrong aproach. i thought that it may slows down, when i collect a 100k data points each for three sensors, having 300k data-sets in the plots.
anyways, bottom line is, what i want is not possible, unless i also set the ticks each loop again. then i will look how fast that is. thanks for going through that whole topic :)
Andre
Andre on 21 Jun 2023
im a little lost right, i made a new script where i can test it out, so i dont have to screw around in the script i am using at the end. after i did it, i let it run and i do not have the same effect, it is working there as i want it to work.
so im not sure whats causing it.

Sign in to comment.

More Answers (1)

Richard Burnside
Richard Burnside on 20 Jun 2023
The "xticks" and "yticks" command will let you manually set your tick values.
  1 Comment
Andre
Andre on 20 Jun 2023
Edited: Andre on 20 Jun 2023
but thats exactly what i dont want to do. my goal is to have it always have 10 ticks, and not some auto-stuff interfere and change it with each loop iteration, but i cant find such a thing.
and thanks :)

Sign in to comment.

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!