Info

Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.

Combined stacked and multi-bar barchart

2 Ansichten (letzte 30 Tage)
Claudius Rosendahl
Claudius Rosendahl am 27 Apr. 2021
Geschlossen: Claudius Rosendahl am 12 Mai 2021
I have three data columns (Y(:,1:3)) and their corresponding errors (Y(:,4:6)). What I want is Y(:,1) grouped with a stacked bar of Y(:,2:3).
The following code creates the attached plot.
figure;
b = bar(2:2:40,Y(:,1:3),'FaceColor','flat','EdgeColor','none');
X=cell2mat(get(b,'XData')).'+[b.XOffset];
b(1).FaceColor = [0 0 0];
b(2).FaceColor = [0.9 0 0];
b(3).FaceColor = [0 0.7 0];
hold on
errorbar(X(:,1),Y(:,1),Y(:,4),'LineStyle','none','Color',[0.6 0.6 0.6]);
errorbar(2:2:40,Y(:,2),Y(:,5),'LineStyle','none','Color',b(2).FaceColor*0.6);
errorbar(X(:,3),Y(:,3),Y(:,6),'LineStyle','none','Color',b(3).FaceColor*0.6);
hold off
So I want the green bar on top of the red bar (if green > 0, otherwise green bar below zero as usual). Repositioning the error bars is not a problem.
Is there any way to cleanly group stacked bars? I guess I could figure out some workaround by adding multiple bar plots together, but that seems messy and very time intensive....
Thanks!
(using Matlab 2020b)
  3 Kommentare
Claudius Rosendahl
Claudius Rosendahl am 27 Apr. 2021
"It's not clear to me where you want the green bar placed if <0???"
Sorry, that was not explained well. If green < 0, the green bar should be below the y=0 line, while the red bar stays where it is.
I don't mind switching red and green to make this work (e.g. green at the bottom, red above), that would not be a problem.
"Most of the time, you end up plotting one or the other (or both) with missing value placeholders [...]"
Well so it is just as I thought: no easy solution possible :-/
Thanks for the comment!
dpb
dpb am 27 Apr. 2021
I was asking if you wanted the green and red stacked or still wanted a third bar if green <0.
If just use 'stacked' for those two columns, the negative values will still be below the y axis, just not offset horizontally from the red.

Antworten (0)

Diese Frage ist geschlossen.

Community Treasure Hunt

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

Start Hunting!

Translated by