【MATLAB】一组含几个bar的柱状图的绘制以及errorbar的添加

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。2 N4 P% O+ D" @+ u- Y
实例:
6 }' |) g% t* G+ Q$ J9 S/ H9 \% 数据
* r! W% y! X# ~/ _volume_mean=[0.73,0.45;
; E" e" ?3 ^5 S+ x+ o                        0.42,0.43;
  m+ {  d- d0 e: g7 _" l) p, I8 U                        0.70,0.42];                         : V8 E4 I) ~3 j; g6 A7 h
volume_std=[0.65,0.17;; x2 g+ h  H8 _3 B/ z0 ]* {& V
                     0.35,0.14;
$ z5 _0 v9 c% r9 u$ f                     0.44,0.13];
, B$ H" {; [6 c$ G% ?1 z/ Y( Z%绘图                     
" D/ Y: T4 l0 T0 f/ j9 ^" k1 ?9 \  m$ aclose all;figure;
; V" M2 h8 S: K+ I8 Q2 {h=bar(volume_mean);& N7 O3 D" G; W8 [9 [
set(h,'BarWidth',0.9);        % 柱状图的粗细5 E: t% T7 ]. [* s+ ?
hold on;
# O, r" M4 L( _set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
/ @: d# h# U# g. f$ E; ~/ Z' H* Zset(h(2),'facecolor','k')        % 第二列数据视图颜色: z3 }. R! e0 o
1 |( q; ?( e; V0 K( E' k+ C
1 H3 @& o% w& S7 @+ C* l& g. J0 @' V
ngroups = size(volume_mean,1);
9 q2 m0 w' F* N4 y/ j& \! nnbars = size(volume_mean,2);
5 g! I8 s; B2 i; I2 K) q: j: B. ggroupwidth =min(0.8, nbars/(nbars+1.5));
" o: A4 z" m: J$ m
- K2 W5 s$ Z, h1 R! d
; R1 T. I' ?) y: d4 C0 X# T# f; ]$ d% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap
! W, ?. x; x" `; T%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red
6 @0 _" \1 D6 N1 b% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];. a7 X: H* J7 w& g. h  i
hold on;
7 M( O/ S4 @" w& |  {7 U: C+ dfor i = 1:nbars. v( O) H, q* l2 Z6 t( A
    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);+ R+ x, T9 _+ `# i$ ~4 Z8 r# T
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);6 Y/ ^! l2 q0 m% c4 V
end5 ^: C- B; C, _- Y
9 @1 [- e- U* [! J! o1 F; I( p
" {3 v4 O) t4 o* F/ T: \9 Y1 m
set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)! d$ j% ~8 m* g
ylim([0 1.5])2 |" p& k9 Y5 N* {! E; _" @' |- t
set(gca,'ytick',0:0.5:1.5)0 E4 I' I* p8 M: w: O
xylabel(gca,' ','Volume[Sv]')
% g$ c' [% b: B# j- S8 L, z; Vlegend('data1','data2','location','NorthEast')
  l$ r' q6 h- c* @9 j  r2 |: @. ]5 F8 O5 R% E

, k3 r7 q+ R  f! L2 r  J& x以上实例可以参考使用。
5 D7 ]# q3 k4 |  l; A8 S5 F# i5 F8 N$ y5 g! C" F7 z1 q
! ?9 G7 \: c, h1 V9 @, [9 `) P
errorbar的局部调整:
) A5 k) d$ ~* Z+ P. i* }2 M1.头部宽度调整* F$ f  ^6 r) \' W" d/ c1 l, R
% Create errorbar4 x$ O+ q+ ]2 {' v' `
X = 0:pi/10:pi;% e' X3 B( k2 t0 {
Y = sin(X) + 1;
4 |$ N2 ~. `' B% z, |& qE = std(Y) * ones(size(X));) v4 j8 S2 P  v; j) L- C
ha = errorbar(X, Y, E);
' ^; _) Q  h, q% Width of the top and bottom lines of errorbar6 P- j# m' }( b/ C
xlength = 0.2;9 s7 v! g# [4 x
% Make horizontal lines with 'line'
3 E) I, Z- W) Efor k = 1:length(X), |4 C- E- K: b- `4 ?
x = [X(k) - xlength, X(k) + xlength];
. D2 S, b$ j( N. X- ]( o7 ^% X0 D y_h = [Y(k) + E(k), Y(k) + E(k)];
' H8 S: ~, ?, [$ C: h, c line(x, y_h);
) I' c' C1 j/ D y_b = [Y(k) - E(k), Y(k) - E(k)];
& P  @5 S& T  Y# g line(x, y_b);0 w3 m  r; P& P5 F! ?7 P
end' ?$ Q, X( `7 S+ j, ~3 V
参考:www.52ocean.cn
) ~. m+ b- C% }0 b9 n$ j. _; n- F$ G: J

/ V8 `7 r% S* {& _$ K) F8 h% v5 x                    
6 y" g* I" Z$ u6 F+ I
" N( ?6 ^' U5 J* |: X/ s) ?" p                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
黄金品质
活跃在2021-12-8
快速回复 返回顶部 返回列表