收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。( P0 N( I# K, t: H3 m
实例:2 t* l& [. M# Y+ u0 W8 j, h
% 数据
* w7 P6 L/ d% }0 l% ?volume_mean=[0.73,0.45;3 U- R$ s$ @) w# ^0 s5 j
                        0.42,0.43;
7 B% g# ]! B5 \                        0.70,0.42];                        
  |4 T. H% N( j- L5 W( H$ v2 nvolume_std=[0.65,0.17;
& Y* i( S! B; T6 x1 d                     0.35,0.14;
4 \5 \' i$ O" F& O                     0.44,0.13];; N: }% \) ~- `+ d
%绘图                     
% E2 v# F  i0 k, r1 m! U( oclose all;figure;( U/ k' ~: E2 W
h=bar(volume_mean);& J, k9 m6 a3 X1 Q
set(h,'BarWidth',0.9);        % 柱状图的粗细" B% K) V- z/ B2 C% E2 x
hold on;$ [  n- m: u6 I8 a* D. ^: ?! r( O
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色4 W4 X' r5 ]9 g/ m6 M- J
set(h(2),'facecolor','k')        % 第二列数据视图颜色
$ L9 Z$ p* S7 |+ C/ \% ^( @0 x) Z& {0 D; b  |4 r$ x6 F

4 |7 `8 E) _6 R9 J4 {9 [ngroups = size(volume_mean,1);
5 R; r. x. M0 Q' o  Nnbars = size(volume_mean,2);
- R( ^( r6 ], A  H' l0 |groupwidth =min(0.8, nbars/(nbars+1.5));/ E, O( [* K: \1 u9 y* ]5 r: c

& s9 ~3 y* D0 n) r# h  g+ y: Z6 q4 {- O0 V, R
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap
% X7 B, K; i2 J- U%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red
. j) r' M5 @: ?- {% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];8 X' i. ~# r# L" e* d% T+ W. d( Y* F
hold on;, l0 [' E/ E6 |1 V$ O
for i = 1:nbars
6 J5 u+ {. t/ E3 X7 W    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);5 C' s4 k  z* w, F/ m  Q
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);) @. F1 O. n- ~8 R/ N
end& }3 P" f$ l* [' j: J$ T" P* x7 H$ M3 W

4 C0 R4 b5 e7 U7 F8 d2 U. v5 V; N" y
5 }6 u) Q) b; }  y0 G9 {8 t9 ?set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)
- d! V, F; Z7 o" W) Xylim([0 1.5])% @" `9 Q; p7 U5 G2 L4 x" u
set(gca,'ytick',0:0.5:1.5). S* m8 t7 U& h
xylabel(gca,' ','Volume[Sv]')
( D1 d* m+ m' A' t1 q1 [# glegend('data1','data2','location','NorthEast')
  q) R5 |2 M' p. e
! ]! P: D- C, u' Z& q0 Q/ E/ W
1 N+ b' G: V6 ?' F1 k以上实例可以参考使用。
" D; A% E3 V+ P7 L6 ?. s
6 {6 M3 v; C& a! s; a
7 f& J) @! T/ `& q0 R9 Kerrorbar的局部调整:0 C0 H; A( c$ y% T, i
1.头部宽度调整
1 v/ W. ?$ P' O9 b3 b$ h4 m% Create errorbar+ t' t; Y2 ~0 O* ?, @
X = 0:pi/10:pi;
1 @9 R7 A! L5 ~1 K+ P: a( ]Y = sin(X) + 1;  _" p4 z" k; ~0 O
E = std(Y) * ones(size(X));
( `% E( @; P" H" c9 cha = errorbar(X, Y, E);
/ G0 P) v2 v; K2 x- P6 a% Width of the top and bottom lines of errorbar
% @( ^# B2 A1 I& dxlength = 0.2;% v- t, G5 x) D7 A
% Make horizontal lines with 'line'5 i0 D- e5 ]/ Z
for k = 1:length(X)
* j, u# ~3 a% j% C0 [/ x, _ x = [X(k) - xlength, X(k) + xlength];
( o9 b" w$ U$ j3 z4 O+ z/ y y_h = [Y(k) + E(k), Y(k) + E(k)];9 x* y. r5 u8 {$ Y6 i
line(x, y_h);3 M+ a0 s0 a: r0 f' V( c
y_b = [Y(k) - E(k), Y(k) - E(k)];
+ p& P, M: K/ R5 x) |) ~ line(x, y_b);& d3 k! u8 j) Q# d. p+ H2 m
end
  u9 K  P7 S+ B: j5 h/ s参考:www.52ocean.cn
% N: m" u- N( N( _2 J3 P1 }( ^; C5 C! F7 N9 B

* [" o: g/ Z& `+ B  [9 M                    
( S2 H) v  h; u) q. _5 ^; a1 ?9 \
                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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