Filter löschen
Filter löschen

Prevent Non-integer Tick Marks

8 Ansichten (letzte 30 Tage)
Paul Wintz
Paul Wintz am 2 Jul. 2022
Beantwortet: Paul Wintz am 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.

Akzeptierte Antwort

Paul Wintz
Paul Wintz am 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

Weitere Antworten (0)

Kategorien

Mehr zu 2-D and 3-D Plots finden Sie in Help Center und File Exchange

Produkte


Version

R2014b

Community Treasure Hunt

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

Start Hunting!

Translated by