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

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。
) K( n( I5 ~; S$ Q. L9 {' U实例:
6 K8 J) E) W$ E; ?' X" F. {% 数据. G9 I" C: n. ?/ U! X: f8 k2 V+ o1 ?
volume_mean=[0.73,0.45;
- L! |; K1 B/ \% q3 j                        0.42,0.43;& l# ^" n+ Z) M8 [  _" C* |
                        0.70,0.42];                        
6 U) ?9 g. Y0 [5 O& l: v7 [: `# rvolume_std=[0.65,0.17;
0 P2 V: x) R: Z, U% }, p0 C, Y                     0.35,0.14;  a) f( H: V0 i; Z9 ?
                     0.44,0.13];6 Z5 I4 p5 G9 }5 D; v
%绘图                     
; E/ j- o$ P- [8 I) |  y9 V% ?- yclose all;figure;% u! F0 F# O9 C6 h, B
h=bar(volume_mean);
6 E: F" p) r- Kset(h,'BarWidth',0.9);        % 柱状图的粗细/ T& x8 {2 c. ^3 C- u6 f
hold on;
, P. M# U3 q; \set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
$ z  ~* l- J( K) fset(h(2),'facecolor','k')        % 第二列数据视图颜色/ W8 x; d- Q% T; {& [6 D
  k/ b7 I. Y" P; ~5 W! [- X% J

6 n- z# y' A$ ]6 b, F5 ^ngroups = size(volume_mean,1);
' M: v' z& W4 r& E! m+ k) Y* inbars = size(volume_mean,2);! t# ]" Z, ?+ z8 I- @( p- W7 e
groupwidth =min(0.8, nbars/(nbars+1.5));
3 ?) M: h) ~/ x5 K; A
) g6 D9 a2 r2 o3 \/ u, L# O  x+ Q' k- e
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap
- `1 x8 k4 D: [8 s. e%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red, `) I$ L/ `0 b- I0 ~9 }
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];
- Y8 i# u( u2 v8 s6 S$ ~# C: xhold on;0 C% n2 |0 S  e2 O& A' t' S: {+ s
for i = 1:nbars
6 B8 a9 H7 a' ]8 ], F& w    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);
* p% }3 t* R1 Q2 y! P: q    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);
- y2 N# k. D7 G1 h' C% A0 I& Qend
7 e& Q; V0 V( Q% z( \2 }' O5 y! ~5 x- ~3 j

: h( t" c# m2 ^' J% m) e, Y0 B; ~set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)0 j: A! q2 c4 q& f$ o3 C
ylim([0 1.5])
# M8 e6 M9 d! O; h. r  Xset(gca,'ytick',0:0.5:1.5); }' n, D7 \: p7 A6 B
xylabel(gca,' ','Volume[Sv]')& a# \( @8 |+ K* T7 N% ~* `; B- r* G
legend('data1','data2','location','NorthEast')
3 z4 t0 K7 s# A+ D% L0 ]) H
* w& S# Y+ u$ n& ]+ v& s0 ?! j# R; d5 `, Z  C
以上实例可以参考使用。
; V, |4 R$ ~  n% N8 X$ B, p8 l1 P; K
2 F7 d! D$ [4 w
; I/ \- t/ s% Y# |# `3 z1 q  aerrorbar的局部调整:
& h& [4 O  K2 S7 }0 C4 o4 N& k1.头部宽度调整! i# ^2 ~' B, \
% Create errorbar+ B. |( j2 s/ o$ B0 U6 Y$ w
X = 0:pi/10:pi;
& l. V# f; f' _0 u! uY = sin(X) + 1;- u. t! I6 G. z7 q. K
E = std(Y) * ones(size(X));
& v- T7 }3 R0 W% p7 T/ k+ ^3 j" kha = errorbar(X, Y, E);2 i: f% q% W, R$ r" ?( I
% Width of the top and bottom lines of errorbar
9 `6 i: l6 \  m% _' u# Z: l6 |2 l$ O3 }xlength = 0.2;0 o, L; |, M: y4 A5 k
% Make horizontal lines with 'line'
; N; R0 D& R" P0 C2 L! O  Sfor k = 1:length(X)
, ~( \& r9 K7 ^8 k* t0 x4 A5 r$ \ x = [X(k) - xlength, X(k) + xlength];1 {' F" O' V% ^3 G+ w+ e
y_h = [Y(k) + E(k), Y(k) + E(k)];& K/ l, T7 I( J6 K! F( L# m
line(x, y_h);
" h1 N4 T9 H8 R5 g2 G y_b = [Y(k) - E(k), Y(k) - E(k)];
9 U; Q7 k$ p" H- m( J' |* m6 D line(x, y_b);
1 F0 Z( r2 Z& z1 _end8 a, U1 v" F. C  w7 P; h
参考:www.52ocean.cn : k+ J( t" Z1 S2 J+ I4 l7 f

! f) i/ l4 Z2 m7 G0 I5 b( ^" `4 c/ P( L: U# ^
                    
/ ^1 g+ z( C4 x" b: S  R( l  M) a* M1 a1 s, _0 v
                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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