在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。0 ?3 }& \" X* @$ r, R
实例:
4 {) n( v6 j- ^$ F) \& m* K4 s% 数据$ p8 P I. L) v9 m* f6 N
volume_mean=[0.73,0.45;3 Q$ u% f( C; Q6 g
0.42,0.43;( |& S5 n& Q: U7 Y, n
0.70,0.42];
$ b, \$ n; q4 H" p' ?) Cvolume_std=[0.65,0.17;7 d0 Q K/ \1 M7 g2 [4 X. ]3 Y
0.35,0.14;( h+ J( `5 Q# o2 ]6 n2 v# S
0.44,0.13];
7 E$ V6 _0 x/ F7 R. D+ @: d/ E0 w%绘图
8 T. f$ d5 \+ z5 v$ }# }close all;figure;8 @! U0 P6 [. w0 s) M/ b, K# Q
h=bar(volume_mean); v7 O1 _- ~7 T5 u1 L6 x( B
set(h,'BarWidth',0.9); % 柱状图的粗细
" J9 r" v- F Zhold on;
% m; I8 R8 |3 Tset(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色, a" {( D* B% s- i& j* m# g+ S
set(h(2),'facecolor','k') % 第二列数据视图颜色
: V8 {- ~5 J9 ]/ ^: p5 F+ N9 _7 Z) B7 ~( \7 G# z8 u% |
7 F& ^: a( M d9 x7 _5 U
ngroups = size(volume_mean,1);
, w8 R' i2 p+ f8 Z9 H! pnbars = size(volume_mean,2);/ N- x! N' t; s7 W3 o
groupwidth =min(0.8, nbars/(nbars+1.5));
2 C' P) D% G+ e: k" t0 V2 a8 z4 Z' e7 T( `8 x
; l4 p" }. a) Z6 ?6 B" W
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap* m: c2 J+ ]" E9 h9 `) ], m
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1])); % blue / red' k; T( p2 |1 A2 G" c7 `) L
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]; y: j' i+ p9 [3 d( P
hold on; H3 H& f5 W. w$ T4 e9 Q6 r
for i = 1:nbars
% c4 k1 I _- e; P5 s1 H; R' L( O x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);0 Y% ~% @& c! z0 n/ t- K# t
errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);0 ?, g0 P! d/ [/ d$ {2 m
end
6 O1 `$ Y% t* ~" e4 g$ B1 k/ o# W y# j( }! K
: l# g& T* t. ^
set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)( E6 C0 C$ `: ?/ @
ylim([0 1.5])- ^: i0 P2 {/ V2 Z2 k2 J' Q
set(gca,'ytick',0:0.5:1.5)' ~. b9 ]7 W7 T1 o; p! E# F8 x: v
xylabel(gca,' ','Volume[Sv]')
* ~7 ^, C2 R* _1 ~/ Ilegend('data1','data2','location','NorthEast')/ |8 q! B( p1 A2 |5 w
5 n9 K5 ] n* p, d) ?# Q3 z$ w1 H; A" c2 `4 A
以上实例可以参考使用。$ N5 ^- [" t; ~) q
: n X, h5 l& w7 `0 J$ V3 m A; a; j
9 d+ l: f2 a2 l6 W7 R" b
errorbar的局部调整:
( P4 x9 M# ]5 F" k* \; a1.头部宽度调整
* B S$ y1 {3 N, v1 v5 S4 ]% Create errorbar
/ T2 W: t. \) w8 S/ EX = 0:pi/10:pi;0 y3 h) w7 V; F) E
Y = sin(X) + 1;6 M& g( o5 W: u# J
E = std(Y) * ones(size(X));
$ M" }# @; _2 Q% g2 \& uha = errorbar(X, Y, E);% q) i; a$ ?/ b% i# b. z' F* t6 ^9 `
% Width of the top and bottom lines of errorbar0 J6 B0 \6 V& j
xlength = 0.2;
, d$ E4 e0 d; @! R% Make horizontal lines with 'line'
( w, R( @; m0 H4 H: {- r Y$ O3 Lfor k = 1:length(X)
9 P) x# d: Y0 ?0 o! D, q x = [X(k) - xlength, X(k) + xlength];
4 s0 i4 m* Q. e) T1 ]) c b y_h = [Y(k) + E(k), Y(k) + E(k)];
; ~! v* \6 ?. l* y line(x, y_h); u& j$ D# c; }" P/ T6 r' F
y_b = [Y(k) - E(k), Y(k) - E(k)];! u; ^) u7 n% `1 n$ j$ i6 \+ l; }
line(x, y_b);3 u, `) A7 B- |/ d5 D$ U
end
6 t& m6 ~# F$ [- B参考:www.52ocean.cn
# |2 _' i7 v$ F( ]+ e- F+ ]3 t
& t' X- m; j5 }( q s
$ q3 ?7 T9 x9 [) T" y7 O' B: S5 t' c' q8 o9 x. j5 v
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |