在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。, K5 a3 b, f9 X K4 [. U
实例:4 y: X8 R& s" |2 s2 E6 C& U( o; o
% 数据0 g" p$ ~5 f0 f& ^' `; @( C& }
volume_mean=[0.73,0.45;% o; p% ?& I* G3 [' J
0.42,0.43;
" N! r) N2 S, A; N8 m8 i 0.70,0.42]; 2 w; v0 M' M! @' q2 F& H
volume_std=[0.65,0.17;+ g8 G/ O! s* n1 a! d1 ^5 K: e
0.35,0.14;0 f& S/ b$ E4 V5 |8 X
0.44,0.13];
; _' w/ N: A; I+ Q& u5 j( [$ k%绘图 4 i% }# t; n0 I3 {
close all;figure;7 F6 m. d3 k. V* ~
h=bar(volume_mean);0 K7 t, ^) A) n9 ^4 K
set(h,'BarWidth',0.9); % 柱状图的粗细0 n4 A$ ?( Y+ V: M m9 l" l
hold on;
/ b4 }. X7 N. m$ g4 w7 lset(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
* U! p3 w, P; k) C5 Zset(h(2),'facecolor','k') % 第二列数据视图颜色
$ n( j& l( V3 F4 o1 D( w
: d$ K6 Q% D* d2 m s) R. o5 s. d" m. E. G% I
ngroups = size(volume_mean,1);1 g/ D7 ^9 y# Q* q% E& Q Y# I, O
nbars = size(volume_mean,2);
5 P6 L* `& v- V' s; g/ U/ X( Ugroupwidth =min(0.8, nbars/(nbars+1.5));+ {! d- k7 [3 a( B) R( Y) W
0 ?# R0 U) V( O; i2 m: F/ l& [0 I+ i8 X+ K
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap. r6 ~! S6 H/ c3 `
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1])); % blue / red+ Y, N$ C4 ]# ]( F/ |5 E8 P# a
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];
: ^/ O6 ?0 D& e- J5 zhold on;' ^3 U1 s% k4 W, Y# t* C* D
for i = 1:nbars
) ]; Y1 N; T' W2 \1 ^ x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);/ T: u* d0 D2 p
errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);9 O9 b: C7 J8 |$ {$ _: {
end9 F' ^1 z o: _: _2 v1 O4 z' j& [
/ z- N2 B0 U3 Z7 \0 F8 V
" {- {6 M0 G( k! Nset(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)9 q* M r5 j) _" ]- S3 ]
ylim([0 1.5])% V. E; s0 Q) V" ^0 h
set(gca,'ytick',0:0.5:1.5)& _5 S: [9 z/ i; J
xylabel(gca,' ','Volume[Sv]')
+ t6 K5 X' s$ o7 h, m) x" b+ }- Flegend('data1','data2','location','NorthEast')& `; v" {5 Z4 N, a1 ~- H# B/ I
# q% K2 w5 ^3 x! w: e
/ G3 [2 c: e! B- E& O: A+ |( P/ l以上实例可以参考使用。
* \* V- l. r Y5 I s: e; m
) i! v% n' f) i
7 k0 p3 f- d" N5 g% c8 @$ Rerrorbar的局部调整:5 v( L9 C$ `8 i( `! d' H% | r
1.头部宽度调整& b) I/ G/ x1 c$ H% Y8 ^ y
% Create errorbar$ {0 ~5 g$ h4 K6 o4 S
X = 0:pi/10:pi;
/ T7 |: h/ k# P5 ^' I5 fY = sin(X) + 1;+ u0 ^) T6 e1 X' n) P% a/ R8 R
E = std(Y) * ones(size(X));' d2 _& Z e9 p) F, R" [ m
ha = errorbar(X, Y, E);3 L% f6 |- l* `- p3 Q# G
% Width of the top and bottom lines of errorbar
2 g& A$ a: W9 K9 }xlength = 0.2;9 n/ b( I" e" O3 L t& `3 o) I% Z
% Make horizontal lines with 'line'* b. R7 i3 e* n8 x1 _ i" {
for k = 1:length(X)
* T. @4 W; e) l* o3 ] x = [X(k) - xlength, X(k) + xlength];5 u4 p- g" I" ?% i/ A, V# a! [+ r6 E
y_h = [Y(k) + E(k), Y(k) + E(k)];
2 w1 y$ @1 ^9 K line(x, y_h);
; e- _: D0 a3 k+ {5 Y t y_b = [Y(k) - E(k), Y(k) - E(k)];
/ t3 C$ B6 n4 o: h line(x, y_b);
2 P. j9 x9 [- Q2 p% nend# d8 G/ m, r- D, D
参考:www.52ocean.cn
4 Y% y4 Z8 R/ _1 U% f1 J6 P- o0 R
$ A* ^; M4 }* P5 z: {" o0 D; ~3 W& |; M
) w/ B" ~9 m$ g, i
1 m- ?4 ^& n0 d. [8 }5 K" s 转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |