merge three barh (stacked)

4 vues (au cours des 30 derniers jours)
Rachele Franceschini
Rachele Franceschini le 12 Avr 2022
Commenté : Mathieu NOE le 13 Avr 2022
I have one table with different regions and data. Each color outlines different data that it should be one bar.
For example the variable A has one bar (stacked) with values from column "B" to "K". Then always the variable A has the bar (stacked) from column "L" to "U" and at the end the third bar with value from "V" to "AE".
t = readtable('Cartel2.xlsx')
I tried this code, but it is not clear, too long
x = [1 2 3];
y = [0.18 0.54 0.50 0.74 0.30 2.18 0.64 3.75 0.56 0.62; 0.63 1.10 1.39 1.86 1.59 0.71 0.67 0.68 0.74 0.63; 4.12 0.00 0.08 0.00 0.05 1.45 0.00 0.00 0.00 0.30];
barh(x,y,'stacked')
I would like to get bar (stacked) sequential, it is possible?

Réponse acceptée

Voss
Voss le 12 Avr 2022
Is this what you have in mind?
(For each variable A through V, one bar with the sum of columns B - K (always 10 in this file), one bar with the sum of columns L - U (also always 10 in this file), one bar with the sum of columns V - AE.)
M = readcell('Cartel2.xlsx');
names = M(:,1);
N = numel(names);
M = cell2mat(M(:,2:end));
M_sum = [ ...
sum(M(:,1:10),2) ...
sum(M(:,11:20),2) ...
sum(M(:,21:30),2) ...
];
barh(1:N,M_sum,'stacked');
set(gca(),'YLim',[0 N+1],'YTick',1:N,'YTickLabel',names,'YDir','reverse');
  2 commentaires
Rachele Franceschini
Rachele Franceschini le 12 Avr 2022
without sum. I would like three barh for each variable in y ( A, B, C, etc). Each barh has values as in table.
For example in this way.
Voss
Voss le 12 Avr 2022
Modifié(e) : Voss le 12 Avr 2022
M = readcell('Cartel2.xlsx');
names = M(:,1);
N = numel(names);
M = cell2mat(M(:,2:end));
hold on
for ii = 1:N
barh(ii+[-0.25 0 0.25],reshape(M(ii,:),[],3).','stacked');
end
set(gca(), ...
'YLim',[0 N+1], ...
'YTick',1:N, ...
'YTickLabel',names, ...
'YDir','reverse', ...
'XLim',[0 10.4], ...
'Box','on', ...
'TickDir','out');

Connectez-vous pour commenter.

Plus de réponses (1)

Mathieu NOE
Mathieu NOE le 12 Avr 2022
hello Rachele
try this !
you get now one figure (plot) per variable , 20 in total)
all the best
t = readcell('Cartel2.xlsx');
var_names = t(:,1);
data = cell2mat(t(:,2:end)); % 3 groups of 10 rows
for ci = 1:numel(var_names)
y = data(ci,:);
yy = reshape(y,3,10);
figure(ci),
barh(x,yy,'stacked')
title(['variable :' var_names(ci) ]);
end
  4 commentaires
Rachele Franceschini
Rachele Franceschini le 12 Avr 2022
Thank you! I like also this solution! Thank for your help!
Mathieu NOE
Mathieu NOE le 13 Avr 2022
My pleasure !

Connectez-vous pour commenter.

Catégories

En savoir plus sur Develop Apps Using App Designer dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by