How to sorting categorical array for plotting
12 次查看(过去 30 天)
显示 更早的评论
Hi everyone,
I have categorical array that use to plot. But in the plot, the x-axis isn't numerically. Its plot from M1, M10, M2, M3...M9 instead M1,M2,...M10
male=MakeMaleSample(10);
male=categorical(male);
data_male=[1:10];
plot(male,data_male);
grid on
function male=MakeMaleSample(n)
male="M"+string(1:n);
end
Thanks for your help
0 个评论
采纳的回答
Stephen23
2023-4-25
编辑:Stephen23
2023-4-25
By default the categories are sorted into character order, not alphanumeric order.
S = "M"+(1:10);
A = categorical(S)
C = categories(A) % default order = sorted by character.
Y = 1:10;
plot(A,Y);
Solution one: You can specify the order when creating the categorical array:
D = categorical(S, "M"+(1:10)) % looks the same as A ...
categories(D) % but the categories are in the expected order.
Solution two: change the category order of an existing categorical array using REORDERCATS, e.g.:
[~,X] = sort(str2double(replace(C,"M","")));
B = reordercats(A,C(X));
categories(B)
E = reordercats(A,natsort(categories(A)));
categories(E)
Once you have the categories in the required order, then your plot will look as you expect:
plot(E,Y);
更多回答(1 个)
dpb
2023-4-25
function male=MakeMaleSample(n)
male=categorical("M"+1:n,"M"+1:n);
end
To force a non-lexical sort order, you have to specify the specific order explicitly...
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!