put bars in bar graph in ascending order?
39 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Minka Califf
am 7 Jun. 2018
Kommentiert: Sandro Lecci
am 8 Jun. 2018
i want to put this in order from smallest to largest population instead of alphabetical order. How can I do this?
clc
clear all
close all
%reading the file
[numbers text]=xlsread('homelesspopinamerica.xlsx');
%manipulating withthe data and storing it at our convenience
statenames=text(2:51,1:2);
pop=numbers(1:50,:);
states=statenames(:,2);
state=statenames(:,2);
homepop=pop(:,2);
homeperc=pop(:,4);
totpop=pop(:,3);
states=categorical(states);
%plotting
figure
bar(states,homepop)
xlabel('States', 'Fontsize', 18)
ylabel('Numer of Homeless Persons (Millions)', 'Fontsize', 18)
title('HOMELESSNESS IN AMERICA 2017', 'fontsize', 24);
set(gcf,'color','w');
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
%turn on grid lines
set(gca,'XGrid','off')
set(gca,'YGrid','on')
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 7 Jun. 2018
If you have a look at https://www.mathworks.com/help/matlab/ref/categorical.html then you can see that when you construct the categorical array, you can pass "valueset" as the second parameter, and that the categories would be ordered according to the values in valueset. So you could pass the populations of the states in the second parameter, and the corresponding state names in the third parameter, and that would create names sorted by population.
Weitere Antworten (1)
Sandro Lecci
am 7 Jun. 2018
Hi,
Use the sort function as following:
...
homepop = pop(:,2);
[~, I] = sort(homepop, 'ascend');
% remove/comment this line --> states = categorical(states);
...
bar(homepop(I));
set(gca, 'XTickLabel', states(I))
...
Best, Sandro
5 Kommentare
Walter Roberson
am 7 Jun. 2018
Since states is no longer categorical, then at the time of your call to bar(states, homepop) then states is still a cell array of character vectors, which is not accepted.
I suggest you look at the answer I posted on how to get any sorting order you want for categorical.
Sandro Lecci
am 8 Jun. 2018
Minka, I am not surprised it gives an error.
In the code you simply copied-pasted my section without checking for redundancies. I thought it was somehow clear that you should have replaced the line with the bar function instead of plotting it once as I proposed and then plot it again in your old version. I also re-wrote some of your lines to help you understand where to apply the changes, but it seems you did not get it..
I am glad you found a way to solve your problem. Best
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!