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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。
+ V* ]& d1 ^& T$ O1 r实例:3 R$ g) i2 `6 ?% i0 d
% 数据
8 R% a$ q( {9 G/ s  cvolume_mean=[0.73,0.45;
" c, F1 i2 p, A, v+ i& V                        0.42,0.43;: a4 a: t/ |1 c  M
                        0.70,0.42];                         & o8 G5 B. e( _
volume_std=[0.65,0.17;
2 r. s. }3 y4 L6 t                     0.35,0.14;
  G4 y, O7 k1 v                     0.44,0.13];! U  Y. M9 J" I& S" z7 E9 m
%绘图                     5 g, K& @0 S: L
close all;figure;3 X; v9 q5 e  y! B1 z
h=bar(volume_mean);
! u: G  i& y: @1 B  o9 |; fset(h,'BarWidth',0.9);        % 柱状图的粗细) {: T: N- [: y; g* W/ }( l
hold on;% N8 J. m3 H# f5 H7 u
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色  W) E2 r7 Z& o5 `) E# j" I1 ?
set(h(2),'facecolor','k')        % 第二列数据视图颜色4 p2 B# b/ X7 p0 b# }

$ D3 }0 }% q+ ^" d; T
; W* N8 h2 P4 _8 F; v6 t/ P( wngroups = size(volume_mean,1);) \9 ?0 B: e9 R# ]( i# o' \/ s8 n
nbars = size(volume_mean,2);! p  d) M& O. M5 B8 \/ W& a, n
groupwidth =min(0.8, nbars/(nbars+1.5));
/ ~9 z' W( G  k2 u  G2 z9 C& `, d6 u& W, _

% B0 A' @* E/ ^% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap0 }7 U8 g' V4 R9 o1 }3 h
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red
7 ^! }" p% B* M8 \; o$ u: P2 W* ~2 L% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];
& f5 y. X# A& W4 E7 {+ M8 H: ehold on;
% N) I$ g7 u, u( F# T. u, Vfor i = 1:nbars/ @2 W+ `1 c% s( P$ I0 G
    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);: @- I6 X) P/ @& O, N
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);
% U0 |: Q& \, i2 N" Send- O8 y* g+ z* W6 l: c
/ O$ \% u! C; q' D: w
/ b9 m' u3 a& h3 S: w* Y3 N
set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)
% a- q1 a3 R) Vylim([0 1.5]); Y  l% N+ j3 Z! ^* ]
set(gca,'ytick',0:0.5:1.5)7 F. g& c; q6 w: u! B  D/ j4 g
xylabel(gca,' ','Volume[Sv]')
# B9 `: z% _& C8 Y; [legend('data1','data2','location','NorthEast'): x% Q; B( ~6 T$ X7 g: @. l
3 q# V5 M* N' q! ?$ `, C- ?
$ Y1 _. O/ V) V
以上实例可以参考使用。
8 p$ s  E: e  V. m" H
9 e- k- W, r: L% C. q% S( t" x* N0 X( o) h5 U! y& w6 Q
errorbar的局部调整:
* }; O% V# }/ V) @5 w1.头部宽度调整- q( a) a* \& a* P0 C
% Create errorbar
, d( Q/ Q" x0 o; ~: NX = 0:pi/10:pi;
: u5 a# ~6 h9 h. e+ Q. n# LY = sin(X) + 1;8 |9 D' h/ Y9 r1 b& z9 N. ^
E = std(Y) * ones(size(X));2 W  ~  C: `1 Z0 r8 k3 i
ha = errorbar(X, Y, E);  @  z+ ]( d1 f4 A$ T/ W4 D' W4 n+ o
% Width of the top and bottom lines of errorbar/ Y, V0 A/ ?  ?( c) X1 z; }5 P
xlength = 0.2;  d2 H5 b# n! q, g3 ^# Z
% Make horizontal lines with 'line'" M& d% ]6 p. k8 Y
for k = 1:length(X)
4 j+ u' g& ^9 d x = [X(k) - xlength, X(k) + xlength];+ G  ]( u5 R; c, I& O' r
y_h = [Y(k) + E(k), Y(k) + E(k)];
9 `8 h" M# g& ]8 a; M6 L line(x, y_h);
! j% ?) Z. K% p$ L0 S4 p y_b = [Y(k) - E(k), Y(k) - E(k)];9 v$ x7 n  [9 v9 i
line(x, y_b);
+ t0 M2 F( K3 b% Kend. D% ^1 G! I' X- N# J
参考:www.52ocean.cn
3 W1 v; M$ g! g6 d4 N
/ p/ y+ Y5 M( B- \4 G+ f* B# `0 t) B( f2 G/ R9 O7 J; f
                    7 E$ |8 V6 U4 u8 e! M, Z2 [
  r1 u# s) e2 e
                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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