Azzera filtri
Azzera filtri

How do you label every other tick?

131 visualizzazioni (ultimi 30 giorni)
FINNSTAR7
FINNSTAR7 il 28 Mar 2018
Modificato: FINNSTAR7 il 29 Mag 2021
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

Risposta accettata

Sean de Wolski
Sean de Wolski il 28 Mar 2018
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 Commenti
Sean de Wolski
Sean de Wolski il 28 Mar 2018
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.
FINNSTAR7
FINNSTAR7 il 28 Mar 2018
Modificato: FINNSTAR7 il 29 Mar 2018
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.

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by