Effacer les filtres
Effacer les filtres

How to reorder a categorical axis?

107 vues (au cours des 30 derniers jours)
Zhe Dong
Zhe Dong le 14 Mar 2023
Modifié(e) : Zhe Dong le 15 Mar 2023
I am ploting a set of values aginst an categorical array, however the the categorical axis always appears in the alphabetical order, how can I control the order it appears?
here's an example
x = categorical({'a','b','c','d','e'});
y = [1:5];
how do I plot y aginst x so the x-axis appears in a non-alphabetical order, like b-e-d-a-c.

Réponse acceptée

Dave B
Dave B le 14 Mar 2023
Modifié(e) : Dave B le 14 Mar 2023
Three options to change the order, depending on where you want to change it:
Option 1: You can use reordercats to re-order the categories:
x = categorical({'a','b','c','d','e'});
y = 1:5;
orderedx = reordercats(x,{'b' 'e' 'd' 'a' 'c'});
scatter(orderedx ,y);
Or you can pass in the order as an input to categorical:
x = categorical({'a','b','c','d','e'}, {'b' 'e' 'd' 'a' 'c'});
y = 1:5;
Or you can change the order on the axes using the Categories property of the CategoricalRuler:
x = categorical({'a','b','c','d','e'});
y = 1:5;
xaxis.Categories={'b' 'e' 'd' 'a' 'c'};
  2 commentaires
VBBV le 15 Mar 2023
Modifié(e) : VBBV le 15 Mar 2023
% Fourth option is you can use find to get indices for array and pass it to
% xticklabels
x = categorical({'a','b','c','d','e'});
new_x = {'b','e','d','a','c'};
for k = 1:length(x)
idx(k) = find(new_x(k) == x);
y = 1:5;
% strange output using scatter
ans = 1×5 categorical array
b e d a c
% even though idx values are substituted, when i use it scatter function
% it still retains old order
Zhe Dong
Zhe Dong le 15 Mar 2023
Many thanks, it helps!

Connectez-vous pour commenter.

Plus de réponses (0)




Community Treasure Hunt

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

Start Hunting!

Translated by