# Prevent Non-integer Tick Marks

12 views (last 30 days)
Paul Wintz on 2 Jul 2022
Answered: Paul Wintz on 2 Jul 2022
I am writing a library that includes function that plots discrete data that always aligns with integers on the x-axis. Including tick marks at decimal values between integers is potentially confusing to users so I'd like to hide them. How can I prevent MATLAB from adding ticks at non-integer values?
For given axes, it is easy enough to remove all of the tick non-integer tick marks, as follows:
ax = gca();
xtick_values = ax.XTick;
integer_indices = fix(xtick_values) == xtick_values;
ax.XTick = xtick_values(integer_indices);
The problem with this, is that it does not update if a user drags the plot to a region where there are no tick marks.
I would prefer a solution that is compatible back to MATLAB R2014b, but if that's too difficult, I'll take what I can get.

Paul Wintz on 2 Jul 2022
I was able to develop the following solution to my question:
clf
ax = gca;
xlim([0, 3]) % Create an axes with x in [0, 3]. This has ticks at every 0.5.
% Hide non-integer ticks.
removeNonintegerTicks(ax.XAxis)
% Setup a callback to handle when the limits change.
ax.XAxis.LimitsChangedFcn = @removeNonintegerTicks;
function removeNonintegerTicks(ruler,~)
% Make ruler value mode automatic, momentaryily, (if it isn't already)
% so that the location of the tick marks are recomputed.
ruler.TickValuesMode = 'auto';
% Now, hide any tick marks that are not integers.
tick_values = ruler.TickValues;
% Sometimes the '0' tick mark is off by ~1e-17, so we use a small range of
% values.
integer_indices = abs(fix(tick_values) - tick_values) < 1e-12;
% Keep only the (approximately) integer values.
ruler.TickValues = tick_values(integer_indices);
end

### Categories

Find more on Interactive Control and Callbacks in Help Center and File Exchange

R2014b

### Community Treasure Hunt

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

Start Hunting!