【MATLAB】一组含几个bar的柱状图的绘制以及errorbar的添加

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。# o, @: r8 `% ?/ F6 O
实例:/ L1 g) n* u2 g. |  b6 T% @+ A- k; C, D
% 数据! k$ w- z( o# s. t2 S
volume_mean=[0.73,0.45;. E; s. a) e1 J
                        0.42,0.43;1 l! I. V+ \/ R3 T# p' ]3 _
                        0.70,0.42];                        
% E% @8 ]6 [5 _$ f2 Q  hvolume_std=[0.65,0.17;' @' K- w1 P+ q
                     0.35,0.14;
) H) d7 {0 i* v  q) [, n                     0.44,0.13];
* c1 P" Z% E: X* d4 H/ P1 W%绘图                     9 N; e/ l7 n" @! W6 r# e: N2 F( e
close all;figure;
4 k. f$ O7 ^5 e3 sh=bar(volume_mean);( D2 _. |9 L: d/ v
set(h,'BarWidth',0.9);        % 柱状图的粗细# R) ~/ {# ?4 J6 U4 D# Z& |; t, T' b
hold on;& y* |$ |! h+ s8 x
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
" o3 ?, e# T/ O! u0 Fset(h(2),'facecolor','k')        % 第二列数据视图颜色
3 T! r( Q7 Y( c# r1 j2 ^8 X
# X& h  l. r% P. V$ Q! J; f$ c' f0 |$ d
ngroups = size(volume_mean,1);
6 m3 s" M* D3 C* j3 Hnbars = size(volume_mean,2);2 N4 l! h/ }2 U! C
groupwidth =min(0.8, nbars/(nbars+1.5));; E9 Y8 d& F) x0 @' I" Q

3 a) a$ }7 D8 P; Z% s
8 |: A3 G4 X: k# b9 U7 ?0 r% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap. n6 k& r3 b8 @8 r# o" g$ `
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red
2 \3 `# ~7 ?& h) _- Q9 S$ ]5 s. Q% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];
% c7 W6 v/ s. y' T+ Qhold on;; x; s  S' L! s5 w
for i = 1:nbars
: c8 O* d  h2 j    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);/ u% K3 x  S8 W) A6 H
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);
9 Y7 j1 o5 S1 Lend
" k+ D8 y! j" i* S5 e2 R3 ~5 n% |8 O: m! ~/ t6 I) Q% ?% S6 x

1 I# B( A( b& Iset(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)! j/ Y7 t# i+ ]& Q  d: r
ylim([0 1.5])% A: \. a/ M% L6 s8 }
set(gca,'ytick',0:0.5:1.5)
/ ?; j/ }3 o5 J/ s, d; ?" [8 Exylabel(gca,' ','Volume[Sv]')
8 Z  F5 }: @8 s2 [legend('data1','data2','location','NorthEast')7 ?3 K6 e: B  K% W6 F

- L  p1 }. L1 j. ?% a
4 a0 G9 G  |+ Y8 l/ n5 o" s# }以上实例可以参考使用。* T! p& U1 e6 @6 y8 I4 s$ A) C
5 K6 o  R$ M% [  }
" a% L3 S( e% q5 @
errorbar的局部调整:  w# ]" p5 ?& }+ T$ w& Z  I' ^
1.头部宽度调整  v! k% a4 m# T( K. ]
% Create errorbar
9 G7 D1 |  B0 t4 q6 x0 tX = 0:pi/10:pi;
# O1 j0 ^! l) i2 d" KY = sin(X) + 1;
; X2 T. j" W# u5 t+ n9 K: `E = std(Y) * ones(size(X));1 p8 a$ V$ I! H2 \3 j. E5 I9 F' C
ha = errorbar(X, Y, E);
: R: y, P! `  e) c( W6 s% Width of the top and bottom lines of errorbar
: N# O- {1 k5 o. X1 k. U/ l3 \) zxlength = 0.2;2 m' Z6 k" ]9 P' _( r- d
% Make horizontal lines with 'line') n5 f) W$ H& ^6 Q; s+ x
for k = 1:length(X)
/ L- C5 ]) d' h* k x = [X(k) - xlength, X(k) + xlength];
" L) ^+ o2 x# z5 R  J' y4 a$ } y_h = [Y(k) + E(k), Y(k) + E(k)];
8 |1 F3 f. s, x- j: \  C line(x, y_h);9 l9 T. _; R7 v; ?' z4 c" ~
y_b = [Y(k) - E(k), Y(k) - E(k)];! }/ z6 ?. z$ w; m/ y% ?8 M
line(x, y_b);/ H+ {6 _' P7 @3 T* Z
end
! h8 ]& J* ?2 O3 _2 v4 F( i参考:www.52ocean.cn
/ w% ], q* M2 c# H8 B* r& q1 e8 A) y3 N
5 n& }7 f0 C6 T
                    
5 c, t# Y8 C+ K' t) ?6 Z, \, f& J9 c+ F* B  K, w
                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
黄金品质
活跃在2021-12-8
快速回复 返回顶部 返回列表