在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。
# u/ C! ~; W S: ^ u) n实例:
; h7 G: y. t, t0 G9 P' d' m$ ?3 j% 数据9 y3 F6 N' T$ Y3 m3 l/ [
volume_mean=[0.73,0.45;
% }4 f" E2 U# N# P; U 0.42,0.43;& n8 `# @0 v3 }' S
0.70,0.42]; ! o7 U# R5 u1 {9 ~
volume_std=[0.65,0.17;
/ ]& B! j; u5 C8 i( Y/ A7 v$ G 0.35,0.14;
" y' e! n% S0 r' W# { 0.44,0.13];
1 B ^. ~& t/ D9 |7 _/ S%绘图
/ y- H# T* a4 A+ Aclose all;figure;3 }. j+ W1 q$ y3 @9 W1 H, P
h=bar(volume_mean);0 O N6 }) R7 E+ d) f. b5 a; e
set(h,'BarWidth',0.9); % 柱状图的粗细
' e5 n w# V7 \7 {4 Whold on;% S4 @8 W3 `8 ]
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
' y: R, g @, U! U1 l- w" P n8 B8 Mset(h(2),'facecolor','k') % 第二列数据视图颜色
5 P# S/ M; B; o1 Q# W* ^4 [6 W0 a+ d) e+ F8 @; d( X
/ K0 r H6 `" _' R* R/ Bngroups = size(volume_mean,1);, F( H" A/ _, ]2 F3 g. v% Z1 j2 F
nbars = size(volume_mean,2);% h9 _! W/ m5 O$ o5 O2 m9 U0 E
groupwidth =min(0.8, nbars/(nbars+1.5));
, v0 w/ P( p0 p. P0 A
3 U r2 f+ U) q4 C9 a
! H D( L" C; Y/ d/ c9 j3 U. ?% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap! d) F7 ^/ N0 I, M
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1])); % blue / red
+ F+ \( R& K6 b$ r) c! T6 y% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];
; W P1 }0 ]5 n8 o2 b4 qhold on; {; I' q- V6 R. s: R2 r" W' c
for i = 1:nbars
) O1 p1 t/ {( R% o x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);8 }( J2 f0 M2 |' t
errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);" U" ^8 m# v+ c# Z. |
end9 y# s3 d1 X; W: u
( {& u4 n$ a9 A. P0 _ d2 x* \' G) a: V. k
set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)/ {. @* \2 t8 Y" o( q0 O) @
ylim([0 1.5])7 o) h- T* j1 p, _9 }
set(gca,'ytick',0:0.5:1.5)
7 K9 o& k7 r- }' e8 mxylabel(gca,' ','Volume[Sv]')
: A% @6 a* M" K' _; S" x" xlegend('data1','data2','location','NorthEast')
; q. G/ j& A9 r/ S/ R" F! B1 {2 H# T) c0 V* B) K9 h6 l
; t! o& Q6 D( E/ Z8 q
以上实例可以参考使用。, S% f5 w3 C: ]/ _8 j9 e7 y) v! Q4 D+ q
w2 j) {" i# [2 H# ~4 g$ M. `6 R- G; o6 Y
errorbar的局部调整:
3 J) a3 N" e5 s+ ?/ P6 @& p* M4 o1.头部宽度调整0 v3 {' k& d$ y
% Create errorbar' i! b/ E( C: h
X = 0:pi/10:pi;
5 I: V6 k6 c8 i# S ~0 sY = sin(X) + 1;
, ^; {3 ]( q# ~: x2 `+ A5 LE = std(Y) * ones(size(X));/ r' u+ n% H L) x ~1 H
ha = errorbar(X, Y, E);
$ r; ?/ g( r8 V" \4 D% Width of the top and bottom lines of errorbar
. Z% P8 I. ?$ c7 v7 p$ u$ J5 Exlength = 0.2;+ Z Z! E* U: T' H5 G
% Make horizontal lines with 'line'( y3 P& p* m7 @; u/ a6 k. Z! k5 V
for k = 1:length(X)+ m3 q+ r2 Q1 i, s$ ]* U$ P3 n
x = [X(k) - xlength, X(k) + xlength];2 c% X1 V1 ^' ~3 v3 T
y_h = [Y(k) + E(k), Y(k) + E(k)];% w( z, |4 j v4 S' J1 {% |1 J+ u
line(x, y_h);. {1 J6 o- i- |1 j7 C
y_b = [Y(k) - E(k), Y(k) - E(k)];
4 W4 x/ W2 e$ l" ^ line(x, y_b);1 | v1 T# Y- |$ b! ~! T
end
% ]0 n g! e6 O' N- x参考:www.52ocean.cn ; E" {8 ~. v$ ?/ ~2 a1 v Q* D- `
b( R" v$ l) |! ^& J' z7 F/ [5 T, P2 @* p \& Y. N) ]. p
/ Q$ z6 n0 V- l5 \+ }
+ u9 K6 E8 K, E3 ? 转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。 |