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

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。
+ r- z! A8 ]0 }$ w- D0 n实例:
9 K( d  |6 {: @0 ^% 数据
# `& j1 k5 o, }! M, [* I* _volume_mean=[0.73,0.45;3 R5 n& y: z' Z$ _! L( w7 j
                        0.42,0.43;( Q* ?1 A2 R6 [7 b
                        0.70,0.42];                         6 b9 L6 `: L0 A% Y' a% g& K
volume_std=[0.65,0.17;, ]7 V3 w  D' X! d- w: M: r
                     0.35,0.14;+ |' g1 W$ c- d2 l1 d* m
                     0.44,0.13];
  F  z% }* T; r+ |) ~; o%绘图                     
% u. c7 |2 y8 e! i$ Oclose all;figure;
: }" _9 y. |, w, C3 n" ah=bar(volume_mean);
: e2 r, K" b* u- D! cset(h,'BarWidth',0.9);        % 柱状图的粗细
" D2 h+ o* ^6 X; V( ahold on;
% |1 `* c. {, Q8 T6 Fset(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
: M  F3 D& Z0 O' F: {' ~4 Sset(h(2),'facecolor','k')        % 第二列数据视图颜色8 z  s- j& Y- g7 U$ I2 `

0 k( t+ _3 A! b" J0 ^
: Z) _9 `* |2 Zngroups = size(volume_mean,1);
, j" v+ l" f, h' m% H( Cnbars = size(volume_mean,2);0 f: B, o6 s- I: \; ?; q
groupwidth =min(0.8, nbars/(nbars+1.5));: h( F& ~: F: G# Y3 h0 b- F

2 D" i3 K" r8 D% {! ~+ ~, b0 U; V; S0 A9 i2 h9 L9 |
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap
3 l8 D- w) c/ K0 @' N) x8 }%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red
  |6 C6 K  }7 y7 j' a! U. K* P% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];7 D& I+ y1 o. n+ E8 p
hold on;5 z# [: ?1 ~7 I' c! ?
for i = 1:nbars( ~% ^) c* ]* P) h
    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);1 y) [; `, X. O7 A* ?9 [$ ~1 E
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);5 _( M' |+ v& P: m2 h2 V
end; u0 G% G+ n' N6 m+ ^' p2 S6 b

3 o0 X: N, I5 Z* a
) `' j7 x' i1 f0 R* yset(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)
( e3 l, R1 t( Vylim([0 1.5])
/ a% y) S8 [; o, d; kset(gca,'ytick',0:0.5:1.5)5 }* d, F; k1 |+ u! X* d1 P
xylabel(gca,' ','Volume[Sv]')
3 r4 A' d1 J2 E4 B" glegend('data1','data2','location','NorthEast')
( A6 [) U. Q; i1 R8 @- P. H9 q# ~% S$ N2 z% `) U& \9 D- @
/ S; \9 y" y. }+ M. ?
以上实例可以参考使用。9 \9 T7 A' l, t" R9 J
$ Y) ]" F+ f! ^5 P; z, \% q

( u- F% h! ?- Q' r# W+ X' merrorbar的局部调整:8 X5 F% o/ a9 w9 ?1 b. N# L
1.头部宽度调整* ^& w: X0 Z- m
% Create errorbar  j; n) H% J: S. o3 X( t( |/ l8 Z
X = 0:pi/10:pi;' C' F& S( S6 A" K/ X
Y = sin(X) + 1;
2 H# y4 {+ Z+ L* S! u; p2 qE = std(Y) * ones(size(X));6 p; ^2 V6 ]3 o, F
ha = errorbar(X, Y, E);
1 I" U9 R* _8 e! v0 y% Width of the top and bottom lines of errorbar
: R( R: x3 |0 T: l) d7 ]xlength = 0.2;& x  y* z  G- A+ M( F( ?
% Make horizontal lines with 'line'3 t% s$ z# o% s6 e& \
for k = 1:length(X)
  T4 `- G$ A2 r x = [X(k) - xlength, X(k) + xlength];. |% N1 z4 }$ R) @( V' K% U; q
y_h = [Y(k) + E(k), Y(k) + E(k)];: X  P4 `. ]: o6 W, m5 a1 u
line(x, y_h);
& T2 H- H  X5 ]9 u9 Q6 Z: D, Z y_b = [Y(k) - E(k), Y(k) - E(k)];! s/ ^2 d9 A8 F! q# W( N: Z
line(x, y_b);7 b" Q" X5 o, u0 i$ F! r
end! s9 e4 V" d4 G( E1 C
参考:www.52ocean.cn
. F; Q- ~1 B! I$ G
! H# ?! Q' D1 ]' d. L" m" J& a. f% V- h
                    2 \7 k. ?: J) i: }& ]8 R! g; I* z1 g
$ s5 ~: ~8 m2 Y% X' K' h" ^2 B
                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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