在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。5 B1 q# X" g! a# u
实例:- W; s* @; L# }& Y, D% j
% 数据% {9 X/ \. v: ~( z m
volume_mean=[0.73,0.45;1 x; _3 i1 |" S6 E" v
0.42,0.43;9 C; X6 v- v+ V0 x$ Q) `( l8 v
0.70,0.42];
8 C) R3 L- @7 D/ Z" wvolume_std=[0.65,0.17;
+ M: j1 M( b. ^8 R; C* I 0.35,0.14;
( y0 e+ Y3 q0 D& Z! E' I9 d 0.44,0.13];+ y8 e2 B! m9 y& ^
%绘图
8 }" |+ [4 `! V/ Cclose all;figure;
( A: ^- y( n* ~, oh=bar(volume_mean);' L/ G# N5 u" [ q4 [
set(h,'BarWidth',0.9); % 柱状图的粗细
# w. H7 p' t/ Y- K, _& @ a, e7 \hold on;
- [6 Q( b O1 Mset(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
% O6 ^ [. n `- C7 w" @set(h(2),'facecolor','k') % 第二列数据视图颜色
% g9 l" `8 [- K9 p; R% m7 v
9 v" u R/ s8 e1 J3 C2 z% ^7 j; C1 f: A0 D# ~
ngroups = size(volume_mean,1);# u4 S9 }) y; [& E' z. p6 n/ t
nbars = size(volume_mean,2);
2 J) {& f0 Q7 \7 N7 F6 S w7 [+ ?groupwidth =min(0.8, nbars/(nbars+1.5));" I, p4 }6 h4 T* }/ ~5 u; z
8 ^) U* q, K9 a4 Z8 \
$ F; X4 n' |+ F1 L8 H' [1 j7 {+ m6 f5 q% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap: Q$ b1 Q5 B; i3 H
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1])); % blue / red4 N( _7 e: N1 Q& l! T8 S
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];, z- J0 J. B/ n6 C. l! d0 R
hold on;' g: |; a7 Q& i" i! h# v0 M# V7 Z% h
for i = 1:nbars
4 W6 Z2 C0 `# i9 W) c: e' P x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);
) n U* ?- j3 M* E w7 `6 ~ errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);, R- B8 D+ ?0 j' G. x# b
end
, Y; X; d4 b7 {$ u# f3 q
% X: @; f n( l h0 v3 \- u, O$ ]7 A6 O$ L# J
set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)
; A9 x3 M4 T( n( i6 n' Aylim([0 1.5])
2 b- B& v* X% ~: eset(gca,'ytick',0:0.5:1.5)
3 P: l. h O2 |7 ~* P+ \, sxylabel(gca,' ','Volume[Sv]')
' t8 ~/ o C$ z+ Q) B3 mlegend('data1','data2','location','NorthEast')$ X/ Y) ~+ Q8 |/ S& x# F% F
; [/ p" W* N8 j( [2 t% o6 n
' d: n1 |4 H- L$ L0 R. M3 ?以上实例可以参考使用。' c- u( h; _/ _) A b! y8 L& ?& i
( d: q% O: B$ F& f* e& M9 K
) ~- M8 {0 _( d9 H N) ~errorbar的局部调整:' q, `' A% P$ y6 w7 D
1.头部宽度调整7 i; J& V' K2 ~- [! p
% Create errorbar; V$ O1 j; `8 [- D2 P+ P+ `' h& H
X = 0:pi/10:pi;
% Q+ @0 C- l- r' V& d5 s( VY = sin(X) + 1;8 e* s' i$ n5 G% r
E = std(Y) * ones(size(X));( r3 O, |% \* B( a
ha = errorbar(X, Y, E);
/ E! Y; b+ G! |. a; L) X% Width of the top and bottom lines of errorbar
0 D5 ^4 v3 J l' s9 s) L: i# Qxlength = 0.2;$ ?7 \; r. @, A* M/ Y- J
% Make horizontal lines with 'line'
! L: I5 W0 F) C/ \7 m* N, gfor k = 1:length(X)
W( @: o! B5 Q8 g& u x = [X(k) - xlength, X(k) + xlength];
* k2 l' D& T3 W& K/ O8 L0 t8 ] y_h = [Y(k) + E(k), Y(k) + E(k)];
' v2 n1 F! q9 l; i( g% Z line(x, y_h);5 {( i+ A, ^6 v1 l: N
y_b = [Y(k) - E(k), Y(k) - E(k)];
) p; Z ^% X# e+ A+ q line(x, y_b);
7 J0 J o- B) J5 G8 M S( x* G; ]end% _ Q7 I! ]/ Q. |2 K# g+ `3 c
参考:www.52ocean.cn
/ d8 ~! h, o( {# s+ M
9 F1 ? v' d2 j* Z" n! X. \
+ _! \& H0 H0 l& x* M! e- B
# z4 [1 f2 w. A- |# Z" z1 _* P! t$ f ?" U2 q
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |