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

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。# ~- z1 n, I$ |/ y8 O7 m8 Y
实例:9 F  \/ D' \7 r, z6 F
% 数据, j0 r4 p, X- z/ [+ v
volume_mean=[0.73,0.45;+ S8 A1 g5 X0 T7 p; T9 R! g$ w
                        0.42,0.43;$ a: c/ w& @' Z
                        0.70,0.42];                        
) p5 K3 f+ H3 M) m& q9 }) Mvolume_std=[0.65,0.17;
8 ^. d5 F" w8 r5 \5 p                     0.35,0.14;' |7 p) C$ Y7 Y: t( n  B
                     0.44,0.13];
9 a% D1 `1 |7 [6 U& e3 M%绘图                     1 \/ G- x# `6 z' \# J; F: q
close all;figure;
' x$ v" Y9 X+ s7 g0 O$ L% vh=bar(volume_mean);: E" a: m7 T/ e& w# H- _
set(h,'BarWidth',0.9);        % 柱状图的粗细9 b" k2 U" l/ _) B
hold on;7 R: Q0 b3 I3 ]' B" d% v; g
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色& }- u! I+ k0 X# O3 @
set(h(2),'facecolor','k')        % 第二列数据视图颜色
* h; U8 ^' J. G+ A# r% z+ R5 [' t% M0 u0 f1 o1 |! D+ T
& p, o4 F# ^9 q3 G* C
ngroups = size(volume_mean,1);/ A; b5 }; K8 _0 L7 f  g1 s
nbars = size(volume_mean,2);5 Z% r8 W7 D2 v& s
groupwidth =min(0.8, nbars/(nbars+1.5));$ Y' X  c. W$ ~

& H4 j" X4 a+ V, D6 a' h  w8 v; l4 P6 q2 [, b6 e+ H9 n+ c% `0 H
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap* j1 T9 e' k- S, U; @2 w5 T; ]
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red! h* q4 o8 i; d& t* G# D
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];. }. W4 s" ]" b& A$ m* _
hold on;
% ^! F3 K/ v6 j! }* X" N7 F3 Dfor i = 1:nbars5 L/ @7 [* [" e  Z
    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);% l! H( C$ L5 w# m
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);6 y# L  `! O& B; U
end
6 C' Y! W/ O" l* c6 Z6 r* H: T, T* }% W5 G

" U3 U1 [! S4 a. B1 p1 u, Mset(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2); C& ~4 x  Z! M' Y! p
ylim([0 1.5])
1 l/ S2 ]; G6 B. i# ?+ dset(gca,'ytick',0:0.5:1.5). g: J! Y/ q% F
xylabel(gca,' ','Volume[Sv]')
4 _& |- u! n* J; W5 G; [legend('data1','data2','location','NorthEast')) h8 s! j9 f' {' B# d
, u! K: T; z+ b" T/ f9 P
. `$ Z, Y8 t4 x4 }7 @4 _' C% m
以上实例可以参考使用。
7 D! e9 C, B: z2 T) y8 ~: j8 u1 O, D$ [3 {. Y! f$ Q6 B# |( n

, r0 e3 b6 z; u. T& i0 Aerrorbar的局部调整:/ M+ G2 f3 @# G  o1 @
1.头部宽度调整
1 b& }, m7 g  }$ p8 Y+ p% Create errorbar
3 R9 T) H  V/ Y( W7 gX = 0:pi/10:pi;
0 |5 {9 b2 L8 k; K6 n. qY = sin(X) + 1;5 g2 D# B9 E3 X! Y; f% w" M
E = std(Y) * ones(size(X));
# j& ^: Z  s/ C/ @' c" pha = errorbar(X, Y, E);
- i4 ?4 F. H2 D  J1 }% Width of the top and bottom lines of errorbar
8 x9 F8 t2 ~1 M0 z  s+ h: q$ [xlength = 0.2;
. h  _) e" Q+ g6 C2 Y% Make horizontal lines with 'line'- h5 D4 r( f! K* R
for k = 1:length(X). V% w! p5 Z5 |  D0 b
x = [X(k) - xlength, X(k) + xlength];/ L* C% ^0 c/ V  }' J3 V
y_h = [Y(k) + E(k), Y(k) + E(k)];8 j: C5 ^( |4 A" [$ C9 Z
line(x, y_h);
% }! Z3 |# F  H3 ?9 p2 T* I/ p y_b = [Y(k) - E(k), Y(k) - E(k)];
1 N+ @- D. X' d' P3 z line(x, y_b);
! I8 I# H5 s1 G; N% [7 a- W6 t  Wend
: I7 j6 |' k: H3 j! N! _; d参考:www.52ocean.cn
5 M1 W, R/ Z/ ]& C* K4 D* h) x# O6 m; E8 e

/ ^0 @. ?, P7 q+ Q* z! O                    
2 b- N- b3 H/ s2 E* Y4 n0 y8 N8 G
! K, ^" f; C4 g4 C. T                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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