How to group statistics by 2 variables for plotting?

조회 수: 4 (최근 30일)
Ben
Ben 2022년 10월 31일
댓글: J. Alex Lee 2022년 11월 1일
Hi,
I am exploring the statistics of some clustering. I have an output cell array 'VolcRegion_Clust.mat' with the region (8 different regions) of each record, and which of the 10 clusters it has been assigned to. I am trying to extract statistics for the number of records in each cluster (1-10), grouped by the region. I have tried extensively using loops, tables and other methods to split or summarise the data accordingly (without usings 100s of lines splitting each region/cluster combination individually), but have had no luck so far. Any hints or help would be appreciated - thank you.
Below is a chart made with sample data in excel ('Group_Test.xlsx') illustrating the sort of output I am hoping to get to in the final product.

채택된 답변

J. Alex Lee
J. Alex Lee 2022년 11월 1일
편집: J. Alex Lee 2022년 11월 1일
are you looking for something like this?
load("VolcRegion_clust.mat")
T = cell2table(VolcType_clust,"VariableNames",["Region","Cluster"]);
T.Region = categorical(T.Region)
T = 66×2 table
Region Cluster ______________________________ _______ Alaska 5 South America 2 Alaska 2 Alaska 2 Iceland and Arctic Ocean 2 Alaska 2 Alaska 2 Alaska 2 Alaska 2 Alaska 2 Alaska 2 Iceland and Arctic Ocean 10 Mediterranean and Western Asia 2 México and Central America 2 South America 2 South America 2
GS = groupsummary(T,["Region","Cluster"])
GS = 19×3 table
Region Cluster GroupCount ______________________________ _______ __________ Africa and Red Sea 2 3 Alaska 2 22 Alaska 5 1 Atlantic Ocean 2 2 Canada and Western USA 2 6 Canada and Western USA 5 1 Canada and Western USA 7 1 Iceland and Arctic Ocean 1 2 Iceland and Arctic Ocean 2 5 Iceland and Arctic Ocean 10 1 Mediterranean and Western Asia 2 2 México and Central America 2 1 México and Central America 9 1 South America 2 12 South America 3 1 South America 4 1
Data = unstack(GS,"GroupCount","Region");
Warning: Table variable names that were not valid MATLAB identifiers have been modified. Since table variable names must be unique, any table variable names that happened to match the new identifiers also have been modified.
To use the original INDVAR values as table variable names, set 'VariableNamingRule' to 'preserve'.
Data = sortrows(Data,"Cluster")
Data = 10×9 table
Cluster AfricaAndRedSea Alaska AtlanticOcean CanadaAndWesternUSA IcelandAndArcticOcean MediterraneanAndWesternAsia M_xicoAndCentralAmerica SouthAmerica _______ _______________ ______ _____________ ___________________ _____________________ ___________________________ _______________________ ____________ 1 NaN NaN NaN NaN 2 NaN NaN NaN 2 3 22 2 6 5 2 1 12 3 NaN NaN NaN NaN NaN NaN NaN 1 4 NaN NaN NaN NaN NaN NaN NaN 1 5 NaN 1 NaN 1 NaN NaN NaN 2 6 NaN NaN NaN NaN NaN NaN NaN 1 7 NaN NaN NaN 1 NaN NaN NaN NaN 8 NaN NaN NaN NaN NaN NaN NaN 1 9 NaN NaN NaN NaN NaN NaN 1 NaN 10 NaN NaN NaN NaN 1 NaN NaN NaN
Labels = unique(VolcType_clust(:,1));
figure(1)
bar(categorical(Data.Cluster),Data{:,2:end},'stacked')
legend(Labels)
  댓글 수: 2
Ben
Ben 2022년 11월 1일
That's great, thanks! The main thing I wasn't aware of was the 'unstack' function, which is really useful! For anyone on this thread wondering how to then plot this up as a stacked bar, my code is below (add this below J's code):
Labels = unique(VolcType_clust(:,1));
figure(1)
bar(categorical(Data.Cluster),Data{:,2:end},'stacked')
legend(Labels)
J. Alex Lee
J. Alex Lee 2022년 11월 1일
@Ben, I appended your code to show the whole thing.
Yea, unstack/stack are ones that I vaguely understand, but never fully understood the arguments - I usually have to experiment :)

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by