在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。' m U) W# `9 K' Y& b8 \+ q4 H
实例:8 n6 S7 j, a1 ^& o/ J, O% m
% 数据
$ G# S" n2 P8 `2 T+ Z, Dvolume_mean=[0.73,0.45;' \6 n# e+ F0 E: E5 j
0.42,0.43;- _# l9 }6 w$ x6 i. v- q+ Z
0.70,0.42]; 4 V9 q( ^! Y3 F( m2 ]8 B8 m
volume_std=[0.65,0.17;
) g0 j {% z& L9 ?8 N, @4 r6 ? 0.35,0.14;/ i }: b; P4 ]4 h. }; T' r6 C* f1 S
0.44,0.13];
) h2 O3 m& e; y9 ^6 g1 k( K%绘图 5 k# | s! P2 @
close all;figure;$ J0 Y0 B5 c* c/ |% \
h=bar(volume_mean);( Z& z1 c$ ]9 q8 k" ]
set(h,'BarWidth',0.9); % 柱状图的粗细
. i. V5 x( P6 g: M( Nhold on;3 e$ W; _, h8 R) R
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
( B* k/ B$ r$ Q* E( @+ @set(h(2),'facecolor','k') % 第二列数据视图颜色* u2 [* I1 y9 W! {! R a/ t! G- {
+ k- D( D) D5 e( i8 d: b* D9 h1 g- C$ j
ngroups = size(volume_mean,1);& e$ b0 ^- A, f/ f! Q
nbars = size(volume_mean,2);
2 z, W' r) [7 N3 ~, h. c* M' Bgroupwidth =min(0.8, nbars/(nbars+1.5));
! h3 N9 |- ~ }# n+ u- @5 W4 H0 b6 m; ?8 p% d% J; f0 s
/ y, r# E9 K* e( l" b7 l( ?% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap
9 v: A3 c8 n. A0 g+ a2 i' m%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1])); % blue / red- l" k* \! _% x, _
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];2 h; m$ ^0 H. Q5 Q6 E' r
hold on;
. a; R2 D% g+ Nfor i = 1:nbars/ s7 N, T; Q- o4 ]# K
x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);
& g4 ^$ p- e' b errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);
8 {& j* R) c- B6 z/ Kend
6 B( [1 a) v1 r" { }( X$ P g9 X
+ w" u& u. }" \" V, fset(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)8 r9 J8 @6 f: g0 a* D% a
ylim([0 1.5])7 U, U! b% h- w F2 g/ x
set(gca,'ytick',0:0.5:1.5)$ X; f- y% [3 j2 \4 e: z
xylabel(gca,' ','Volume[Sv]')
& ~% f3 n/ F, \3 Vlegend('data1','data2','location','NorthEast')
7 p4 ?% \# K4 O2 E/ Z" X' X! W8 w( k+ `4 G
% u) [: t1 u6 Y1 k! q以上实例可以参考使用。
& J- r# j% h2 u8 L' l. m8 g( G3 o6 t( n9 A
2 v: q! z/ x R* A1 ?, ^3 ^errorbar的局部调整:0 I1 _2 P/ ^5 A* ]) C
1.头部宽度调整( n J7 v* x, J
% Create errorbar2 ^3 u* g' q9 x; b4 P/ s
X = 0:pi/10:pi;0 z) J4 j& `8 M* E
Y = sin(X) + 1;
. N( I m+ _1 Z- W' c; ME = std(Y) * ones(size(X));9 Y0 x3 t2 O/ ]8 j% }( N
ha = errorbar(X, Y, E);
% l$ E; J9 B R7 `2 [ }% Width of the top and bottom lines of errorbar
Z4 L2 B0 j5 Y' q! U3 Y7 z: cxlength = 0.2;7 W$ C4 e- {6 j4 F& a5 w5 F
% Make horizontal lines with 'line'
+ }* E4 T; z q9 N8 P! xfor k = 1:length(X)1 X+ v, r& T5 N$ G' E6 y# I
x = [X(k) - xlength, X(k) + xlength];
* M# _& l/ ?. i# D y_h = [Y(k) + E(k), Y(k) + E(k)];* }( [3 M5 P2 _7 D
line(x, y_h);
# d& `8 y7 x2 _' C M y_b = [Y(k) - E(k), Y(k) - E(k)];
$ V& g2 g1 k/ Y8 h line(x, y_b);; ]+ {1 ^3 B; q& O3 ]
end
/ Y* ]6 f' Q( K9 }参考:www.52ocean.cn
2 v' F3 U5 h) Q
6 `+ V# R; [5 d
1 M5 y$ |* o' `- p) y' [3 t
! j) D9 v1 C9 [3 \/ F' Z) p7 r& i9 b1 @& o, O+ H4 H
转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |