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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。7 H3 N4 m) q' o
实例:& @; g8 k& j0 ?& i
% 数据
  L' x: M9 Y/ J) l0 Z5 M) @volume_mean=[0.73,0.45;
% N0 p9 \! l" x8 N$ j                        0.42,0.43;
' f% z! O2 l8 o) y* S; ]: X1 O6 L. h                        0.70,0.42];                        
2 ^/ [5 c/ W+ d0 ?, d+ Lvolume_std=[0.65,0.17;* I. |; k% N2 v# F: F5 k
                     0.35,0.14;
/ i& v+ ^% n7 F5 I! v: O7 K                     0.44,0.13];! v8 W1 h  q6 K4 R( J
%绘图                     . e3 [8 M, i& ^: X7 N6 y) ]
close all;figure;
2 x3 u  s- U) |7 X4 l& [1 `5 j: Ph=bar(volume_mean);
  _0 E0 M6 l3 J) T8 f1 H4 wset(h,'BarWidth',0.9);        % 柱状图的粗细8 z: u4 p0 X+ c! S  v. [/ d0 q2 N
hold on;& V8 I) b2 D  ~- a0 P+ t1 J& y
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
' \! }/ Z: V9 j3 `) b+ lset(h(2),'facecolor','k')        % 第二列数据视图颜色# K* u; T8 |6 M
1 z3 ]) U, h% \8 _% j4 r

$ Q* y' U7 D" H( f2 I& n5 x0 n; Engroups = size(volume_mean,1);
! p+ i9 o0 I6 l4 i& rnbars = size(volume_mean,2);: ]* o2 I' B4 I" X( H6 a, F8 W
groupwidth =min(0.8, nbars/(nbars+1.5));
* H7 i2 }  d% ^2 L$ |' K+ F! M  Q3 ?3 w# i& [9 ^8 P* C

/ ?# w7 v! u6 }) h8 U; n% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap
  T$ E+ V, j4 e0 P' P5 m1 K+ j6 y$ Y%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red
- O4 i2 l8 C0 [% w% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];3 U9 |# \$ n1 @' ]6 ]
hold on;
  H8 v6 h/ ]& h, d+ Lfor i = 1:nbars
' B0 N5 ^2 ?- S3 D! q- J$ |    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);
0 S5 _! t  q1 V: Z' [# R, k    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);) u& x$ Q2 M& P# k! g
end
4 @6 q+ W; S! @8 X+ p  a4 o" h! b8 S

8 n* k6 [$ r) U0 W% yset(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)' |2 w+ I7 h, u, |" G4 R* }
ylim([0 1.5])) u) M# m: [% H- {1 x
set(gca,'ytick',0:0.5:1.5)
. d/ b" t' M4 {- d. f& W5 bxylabel(gca,' ','Volume[Sv]')& q7 h$ X' v. M" ^) S
legend('data1','data2','location','NorthEast')9 @9 z7 i6 q! H6 x8 H1 i

- s/ i4 W0 X+ B5 D  s6 ?
4 {# \7 Y% w, ]4 l1 w以上实例可以参考使用。
1 `! {. l0 F8 t) A) k) z8 s9 ?9 c% S2 o3 Q+ O8 y
) V9 m: Y/ ~, Q- {- O/ D
errorbar的局部调整:3 O2 j. Z2 s. W7 g% T% j3 k
1.头部宽度调整! q4 j& C' q4 s2 ?
% Create errorbar
" a% Q4 E2 O4 oX = 0:pi/10:pi;7 l- @4 |7 Z; B* z. C
Y = sin(X) + 1;: O4 C. O* x  f/ g7 ]# T2 |) A
E = std(Y) * ones(size(X));
7 p$ q6 x* V; Oha = errorbar(X, Y, E);
# h- \* o/ B9 y7 E$ P$ V' G9 M% Width of the top and bottom lines of errorbar% n) y4 _4 p/ g( V
xlength = 0.2;, o! D2 Z  s- l' [
% Make horizontal lines with 'line'
% z( x1 T& C( Dfor k = 1:length(X)
; b5 I6 @+ m/ \+ \5 j+ L x = [X(k) - xlength, X(k) + xlength];5 U1 z7 S0 z- f0 t$ i
y_h = [Y(k) + E(k), Y(k) + E(k)];6 _+ W7 \# e  H+ B
line(x, y_h);3 x* I# X4 D8 c6 k* Q, J
y_b = [Y(k) - E(k), Y(k) - E(k)];8 K* J" h# s6 ]0 U# Y+ }1 \* U0 `3 k: z
line(x, y_b);6 Q& ^# B+ J# S* }
end# g9 l7 j, S3 P  P
参考:www.52ocean.cn
* Q8 `% u, O4 z& D' G
; d, ?5 u- S$ r. C% c6 C7 T7 ]) ~, V. v! z7 t% O3 i
                    " H  O' o: H, \7 B  A0 x8 q9 T' q
/ w7 g" C, ]$ A; g& w
                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。

相关帖子

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