MATLAB Answers

Is it possible to set the size of the gap between grouped bars in a bar graph?

조회 수: 183(최근 30일)
Heidi Hirsh
Heidi Hirsh 30 Jun 2020
댓글: Heidi Hirsh 30 Jun 2020
I know you can set the width of each bar (I set mine near max) but I am curious if I can minimize the white space by decreasing the x distance between each pair (group) of bars.
This is what I am plotting:
coh = [0.9862, 0.9773
0.971, 0.9544
0.8969, 0.6791
0.8835, 0.9051
0.8558, 0.6727
0.6727, 0.8641];
figure
hB=bar(coh,.95);
Thank you!

채택된 답변

the cyclist
the cyclist 30 Jun 2020
편집: the cyclist 30 Jun 2020
Another option would be to abandon using grouped bars in a single call to bar(), and instead plot the two sets of bars with two different calls to bar(), and specifying the x locations of those bars.
figure
hold on
w = 0.4;
bar((1:6)-w/2,coh(:,1),w)
bar((1:6)+w/2,coh(:,2),w)
  댓글 수: 2
Heidi Hirsh
Heidi Hirsh 30 Jun 2020
Actually I realized you (@the cyclist) already solved my problem. This works:
f=figure('units', 'inches', 'position', [0 0 3.5 2.5]) %left, bottom, width, height
% f1=figure(1)
box on
hold on
w = 0.4;
hb1=bar((1:6)-w/2,coh(:,1),w )
hb2=bar((1:6)+w/2,coh(:,2),w )
xlim([.4 6.6])
X1=(1:6)-w/2
X2=(1:6)+w/2
hEB1=errorbar(X1,coh(:,1),errlow(:,1),errhigh(:,1),'.','markersize',0.05,'linewidth',.5,'capsize',0.05);
hEB2=errorbar(X2,coh(:,2),errlow(:,2),errhigh(:,2),'.','markersize',0.05,'linewidth',.5,'capsize',0.05);
set(hEB1,'Color','k')
set(hEB2,'Color','k')
ylabel('Coherence')
set(gca,'fontsize',12)

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

추가 답변(1개)

the cyclist
the cyclist 30 Jun 2020
This question and the answer from MATLAB staff suggest that it is not possible using the built-in bar function.
However, there is another answer from someone who contributed the barmod function to the File Exchange, claiming to solve this problem. It's quite new, and I have not tried it, but it might be worth a shot.
  댓글 수: 1
Heidi Hirsh
Heidi Hirsh 30 Jun 2020
Thank you for the ideas! I'm super disappointed that it seems impossible to adjust the offset in the built-in bar function. And I don't think I can use barmod because I ultimately need to include error bars on each bar and it looks like barmod does not allow that. This is my complete code (I simplified it above thinking this might be a simpler fix):
coh = [0.9862, 0.9773
0.971, 0.9544
0.8969, 0.6791
0.8835, 0.9051
0.8558, 0.6727
0.6727, 0.8641];
errhigh = [0.0083, 0.0137
0.0137, 0.0274
0.0611, 0.1797
0.0688, 0.0563
0.1426, 0.1829
0.0875, 0.0799];
errlow = [0.0208, 0.034
0.043, 0.0661
0.1382, 0.3105
0.1533, 0.1288
0.1827, 0.3135
0.1879, 0.1743];
f=figure('units', 'inches', 'position', [0 0 3.5 2.5])
box on
hB=bar(coh,.95);
hold on
X=cell2mat(get(hB,'XData')).' + [hB.XOffset]; %find x locations for error bars
hEB=errorbar(X,coh,errlow,errhigh,'.','markersize',0.05,'linewidth',.5,'capsize',0.05);
set(hEB,'Color','k')
ylabel('Coherence')
set(gca,'fontsize',12)
Disclaimer: This figure will plot TINY. I'm trying to make it to fit a two column 8.5x11 page (in one column).

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

Community Treasure Hunt

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

Start Hunting!

Translated by