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

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。5 w; r' m8 Z% b. ]8 {2 m- P
实例:
2 X- V; Y# n$ i/ ^& B8 g% 数据
1 |' ]  t$ N8 W/ [" h! b6 d( A3 d& T2 Nvolume_mean=[0.73,0.45;" Z% @# R5 `  y7 h9 w9 q1 u0 g
                        0.42,0.43;+ I2 l, W0 y1 z9 U/ I' X
                        0.70,0.42];                        
; k7 v% c. h% A0 m% L, Yvolume_std=[0.65,0.17;$ D4 ?0 Y" `( ]3 F: n
                     0.35,0.14;
6 n5 J! S% ~: _  e* H6 T                     0.44,0.13];+ A  s) |1 {- I( R3 ~
%绘图                     
+ e4 U( m& p, W7 ^& Xclose all;figure;
$ l7 y1 Z# a5 V; f1 }1 v9 Uh=bar(volume_mean);& [  f* ?. X: U$ F  J
set(h,'BarWidth',0.9);        % 柱状图的粗细/ \' O, C: g& ^* v' S
hold on;3 H/ `5 ^, O8 s- V3 {% _* ]; u
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
& X0 |3 o$ e7 l: ~set(h(2),'facecolor','k')        % 第二列数据视图颜色
$ a1 g) H) I  u' x
8 z! q7 E& i6 h4 W, s4 q  _( h: N; G: W" e# q
ngroups = size(volume_mean,1);3 S! e& G9 w! e. k- M) L
nbars = size(volume_mean,2);
: p  E. @9 a/ w9 L' E+ Dgroupwidth =min(0.8, nbars/(nbars+1.5));4 r! i' y7 N" M4 e. P. l

* b0 ]" R5 x9 k$ a7 \  P5 i4 W4 s; |3 U0 Q
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap. Y; i8 K$ I7 O0 G, \% H
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red* h+ X! O; W* {& W5 D( y
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];' G3 s; ~) X7 M
hold on;
. Y( M7 V& A+ k( \( z6 P/ Q+ E1 pfor i = 1:nbars
5 H- P# W1 A/ P) f# C/ j2 o0 ^    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);
/ [, ]+ j2 b6 \3 G9 {    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);3 [3 F) s$ i9 W1 \/ @! _7 H
end1 u& J1 M( z+ S+ W) ~$ j; H/ v

2 R8 h: I& b0 W8 J$ c& C
, T1 v5 t7 T+ p% gset(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)
( @+ m' H5 m+ @8 x1 T1 @2 O; }5 lylim([0 1.5])* J6 P  q- m9 z" \3 q" d- w
set(gca,'ytick',0:0.5:1.5)
+ k/ v" O+ q! f' F8 K& |xylabel(gca,' ','Volume[Sv]')
8 t# w# s/ D% X- z- [% @legend('data1','data2','location','NorthEast')
0 n* M0 _; l7 a6 S! h. E. q' B
/ T8 a8 O( f$ l7 Y( ]' g, E
以上实例可以参考使用。$ j5 X. }% Y: A/ M  ?; Z
7 {8 s8 {2 _# O+ Q
+ R+ O9 v0 H" P, J% P
errorbar的局部调整:
7 ?( X8 ^+ {  x% O, p0 |1.头部宽度调整% X! e- L- \/ I
% Create errorbar
. Q$ t; J( C" G4 }2 cX = 0:pi/10:pi;/ ~  o# e/ k4 F9 w; G: F6 X
Y = sin(X) + 1;1 c6 I  l) P3 j( A. Z3 b
E = std(Y) * ones(size(X));, k! J8 z* y- M- r) C6 D
ha = errorbar(X, Y, E);' U" `2 v2 X0 x2 j" Q
% Width of the top and bottom lines of errorbar
; R/ U, n$ b3 y# e& ]6 _) m( }xlength = 0.2;
4 R, N+ a4 j! A# X% Make horizontal lines with 'line'% L) ~" I9 R' s" z! f9 M
for k = 1:length(X)5 l; K) _% _0 |: U3 Q8 N
x = [X(k) - xlength, X(k) + xlength];
0 w- O9 c. Q, {  N8 H; b y_h = [Y(k) + E(k), Y(k) + E(k)];
9 {: m6 h5 c8 p4 }* q' O' s line(x, y_h);, S( n9 p* U0 O8 I) ~
y_b = [Y(k) - E(k), Y(k) - E(k)];( H7 k3 G9 j. d1 j
line(x, y_b);% T6 ~( v6 r1 g' |; |- m7 U  |
end
  c! v& K. K% S参考:www.52ocean.cn
# _8 f1 ]6 N, a  K+ c1 V! k: Q, y5 c6 U. w, |3 @* L# S/ n. W9 C
" E7 i8 c; D) e% v% h
                    5 q3 }* f) x9 E' D

1 l2 L/ K7 W$ W$ A8 o  d                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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