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

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。1 R6 R; k# j/ c5 }& r9 a
实例:, Y; T$ ?' g2 }% l1 _5 z
% 数据1 e: y! k' Y3 Q; p2 y  M
volume_mean=[0.73,0.45;2 n- h0 r+ j4 g" S7 }2 Z) j. b' x
                        0.42,0.43;' v) d9 m  }8 E) u  F
                        0.70,0.42];                         # ~& Y. y" g4 x! h2 ?. R3 d
volume_std=[0.65,0.17;
2 @5 r/ q* `2 R( Z. |0 a                     0.35,0.14;
# E6 O( r3 k" Y2 N' r' M0 Y                     0.44,0.13];
$ x6 E/ h4 l6 L3 X%绘图                     . l( j& }' ^7 c3 g
close all;figure;
3 L8 y& P1 E7 E+ J* wh=bar(volume_mean);
" w6 ~& Y: F, X- Bset(h,'BarWidth',0.9);        % 柱状图的粗细7 e3 E1 [2 s0 t+ F+ L+ \+ N
hold on;
5 x+ {+ I, y* c* t; G! aset(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色! i& ~! y; u5 w$ B( c" K3 u
set(h(2),'facecolor','k')        % 第二列数据视图颜色. b. @! N$ [7 g! z1 A3 n

3 y; F" |5 |( n1 l
  C- y7 v4 ?0 I; ~7 W" T) R( b9 yngroups = size(volume_mean,1);
8 g( W0 ~8 w! T/ ?. E  R* |8 t$ jnbars = size(volume_mean,2);, ]% z8 G% x( U6 M
groupwidth =min(0.8, nbars/(nbars+1.5));
( @" _* O  n6 w5 ]- w; O5 i3 e8 V3 l& r% N: {

4 Q- P9 v9 `2 U; H5 z% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap
3 ^' K6 ^/ E" {3 c( `%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red/ s, f& B/ ~# {: @& a2 E
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];
9 [% J- ?, }: x8 t, Khold on;: T+ b9 q2 v, m) }4 R! z- k
for i = 1:nbars
4 R2 D, G) m& a/ A6 E    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);! k/ S; B/ F) X6 c2 G1 _3 b6 u" I
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);
0 M7 l- J2 J: d, oend' Y" O  W( g2 x: K& w  F2 M

# `- p3 f- A- \8 k+ v9 r# q# b& C: p2 |$ F$ G- S
set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)
& @6 x6 C8 d  h! gylim([0 1.5])- [9 a3 [) G1 x' U# A
set(gca,'ytick',0:0.5:1.5)
9 f. W/ v! y% g0 B0 nxylabel(gca,' ','Volume[Sv]')
- f) E) r& ]! I7 J/ K% E: Wlegend('data1','data2','location','NorthEast')% p4 z' q$ q( g6 V. y7 [3 y
  I9 n7 c0 x. f' P" v3 @( _

' s  @7 Q% M9 G* x0 V$ g1 b: `以上实例可以参考使用。
2 ]: [: \% N- E: d8 H' I6 B5 w: o1 Y, H8 e/ _, T" y% C

3 G* y0 v5 A8 j8 j# i" W. Ierrorbar的局部调整:
& I" {# @/ @4 S0 f6 ]1 f1 F- M1.头部宽度调整
- {8 e; F* W" G1 V/ k% Create errorbar, {* ]' R5 Y- |  ~7 o6 e. O) C
X = 0:pi/10:pi;
6 D# K7 E$ B, d- [, |Y = sin(X) + 1;
9 r3 F+ v% W$ s  }5 n0 H" u/ PE = std(Y) * ones(size(X));
: b/ r$ y& X9 f# h. Q0 a3 Tha = errorbar(X, Y, E);6 J4 V* @0 ^9 b, n9 U2 q2 g1 r, b
% Width of the top and bottom lines of errorbar( Y7 ?$ e3 Y6 o1 e& p3 c& s- j
xlength = 0.2;
2 @8 e6 p4 `: @2 P0 x, u. ]$ R% Make horizontal lines with 'line'+ }0 F7 S) v& d1 i/ a9 e
for k = 1:length(X)
- y0 s" L, k9 A' H4 T8 J x = [X(k) - xlength, X(k) + xlength];
% W' R+ _. z  _( K6 E# g y_h = [Y(k) + E(k), Y(k) + E(k)];3 Y6 I- r; ]# S+ [& G$ b# G$ h7 T
line(x, y_h);) A- F; L# A) l3 j
y_b = [Y(k) - E(k), Y(k) - E(k)];$ P- N+ l) V# F- ~1 |+ t4 N" r
line(x, y_b);
, J0 R  {1 C4 X2 gend! A, o( y" q7 v1 a' d$ h. V1 }  J
参考:www.52ocean.cn
- d/ E6 ]" ]  s3 f4 Y$ i# J. g8 y- ]) }: Z5 E' v& O' E

- M- e5 u: K5 {* b4 N                    # J! H7 H1 {* E' H6 H& o3 l1 k
; E6 A/ ~8 }; Z! R; S
                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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