How do you label every other tick?

I'm trying to scatter plot some data and would like to know how to label only every other 'x' tick. I've been using xticks and xticklabels, but to no avail. This is the part of my code that produces the plot in MATLAB R2017a:
scatter(x_vals,y_vals,[],c); xlim([n x_max]);
xticks(n:1:x_max); % xticklabels(n:x:x_max); I'm aware this is not proper xticklabels syntax,
% I just wrote it this way to show what I wanted.
hold on
vline(average,'b',sprintf(['Average\n(' num2str(average) ')']));
Which for some specific data may look like this:
So is there a way to still have every tick mark show while only having every second or third tick mark labeled? Like in the case above, keep every tick mark, but only have labels "3, 6, 9,[...], 27". Keep in mind the data that is plotted will change, so manually inputting xticklabels({'blah', ' ', 'blah' , ' ', 'blah', etc...}) each time won't work for me.
I've tried looking around for questions like mine but I kept seeing things like "set(gca,...", which is both something I've never seen and wasn't able to get to work. I'm somewhat new to MatLab and I'm not familiar with a whole lot (had to research most of this above code too), so you might have to dumb your answers down for me, sorry :P

 Accepted Answer

Something along these lines:
plot(1:10);
ax = gca;
labels = string(ax.XAxis.TickLabels); % extract
labels(2:2:end) = nan; % remove every other one
ax.XAxis.TickLabels = labels; % set

3 Comments

Okay, I put it in my code like this but got this error:

scatter(x_vals,y_vals,[],c); xlim([n x_max]);
% xticks(n:1:x_max);
ax = gca;
labels = string(ax.XAxis.TickLabels); % extract
labels(n:2:x_max) = nan; % remove every other one
ax.XAxis.TickLabels = labels; % set
Error setting property 'TickLabels' of class 'NumericRuler':
<missing> string element not supported.
Error in bell_curve (line 54)
ax.XAxis.TickLabels = labels; % set

Is there maybe some sort of add-on I need to be able to access things like TickLabels?

You probably just need to upgrade. I'm on 18a and it works fine.
In lieu of upgrading, you could probably convert back to cellstr(labels) on the right-hand side of the last line.
Ah, found what I was looking for.
scatter(x_vals,y_vals,[],c); xlim([n x_max]);
xticks(n:1:x_max); ax = gca;
labels = string(ax.XAxis.TickLabels);
for i=1:n-1
labels(i+1:n:x_max-n) = ' ';
end
ax.XAxis.TickLabels = labels;
So the main issue was the " nan" stuff, as it didn't like <missing > in a string for NumericRuler (or something like that). So just blanking them like this: labels(i+1:n:x_max-n) = ' '; got rid of the error mentioned above.
You'll also notice I stuck the labels stuff in a for loop as well. Doing this allows me to not just blank every other label, but every two, three, four, etc. labels, depending on how far out my data goes. Like in the above picture, the ticks are now only labeled every 3 intervals including the first and last tick.
Thank you so much for the help! My plots will look much cleaner with this.

Sign in to comment.

More Answers (0)

Asked:

on 28 Mar 2018

Edited:

on 29 May 2021

Community Treasure Hunt

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

Start Hunting!