收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。- X4 m& G. h, |% f
实例:
0 u5 ~- g/ r" d* H% 数据
5 n" Q" _! C* }3 b; uvolume_mean=[0.73,0.45;) k/ j; o7 W, k& o' U$ E/ E' I
                        0.42,0.43;
& N1 g" @; E: _9 M5 M6 f                        0.70,0.42];                        
$ L! b. h) j! \8 Dvolume_std=[0.65,0.17;. u" A' H- }* F9 C% m% a
                     0.35,0.14;
& X6 C2 x& ?' o/ g/ B; y                     0.44,0.13];
+ y) b! _" C! y! A$ ]$ J%绘图                     
  L6 }$ z0 ~; w' O! {close all;figure;
+ {) ?& R6 i8 c( A2 A. I! t0 ah=bar(volume_mean);$ n; i) w; r. Z3 v2 H& L# _
set(h,'BarWidth',0.9);        % 柱状图的粗细1 s7 i0 }; R9 ?: F
hold on;
- Y0 W" N* u  q! ]& X  v; G. vset(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
' y1 w! C- q9 o5 P5 [+ F+ @set(h(2),'facecolor','k')        % 第二列数据视图颜色
4 D0 j$ z1 P% D. m* X; w7 j7 h8 W/ o
9 C# }. _" c8 b4 z
) T1 E1 F  r4 W8 p0 E4 N8 O% {ngroups = size(volume_mean,1);
- a4 i: y$ m" m- z0 }5 t0 q- t0 snbars = size(volume_mean,2);
) _: C, _/ B6 G3 Xgroupwidth =min(0.8, nbars/(nbars+1.5));- `! m0 |. A/ I/ e- H- Q
* R: N) s  P( z3 _
9 s1 D! b* G/ g% t: t, j# B& w6 @
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap0 p. v% F9 A5 f5 t, \- L
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red8 e0 H6 H3 Q8 D
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];
7 g, \) r4 Z0 }, fhold on;
' s* N0 `. w& \* a0 D: r2 mfor i = 1:nbars9 @5 M7 I+ f1 L1 ]' T5 l
    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);
4 u+ y, K! W% d) T- L3 Q    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);
% k# `& I; v% x' a: w& D& Y" C  iend
- g7 D+ _# E  a
- ~5 C2 _- u8 D8 V# m9 |. W9 ^8 `1 Z# N9 N  \5 c
set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)' y9 C9 l) i$ p0 P- E3 o$ a* I
ylim([0 1.5])' S8 |0 U+ C1 h* s! d
set(gca,'ytick',0:0.5:1.5); I( {: {6 b  H" a+ \; z# d
xylabel(gca,' ','Volume[Sv]')* J( O1 \; q3 r8 d1 N; O5 B1 I
legend('data1','data2','location','NorthEast')
; a0 @0 t) i, H
8 o0 \7 C/ A3 G6 ?: O! w0 Y. H0 A$ C  a, J7 n; \' Q) x
以上实例可以参考使用。3 }2 F, M* r# w/ L. K5 N) r) y
# I5 Q. ?; c6 C9 Q7 \% F/ s
/ }6 S, C4 p! Y
errorbar的局部调整:
8 K0 w5 B# x- s- k7 C( F1 |$ ~1.头部宽度调整$ l  m: x% M5 B) N  c/ C8 Q7 V
% Create errorbar9 ]1 `( ?( N! e, X$ r9 A' R
X = 0:pi/10:pi;; o5 o7 I( n  d6 t  S- [
Y = sin(X) + 1;' c. e/ p$ U* k# j9 p2 Z
E = std(Y) * ones(size(X));
+ m) c' x5 n- o! Hha = errorbar(X, Y, E);
7 V/ x. u9 g, u+ C/ _% Width of the top and bottom lines of errorbar' D3 y7 w  j& c! M" a
xlength = 0.2;
  L7 K1 k* `6 v% Make horizontal lines with 'line', ^; [, Q. f: n. e: T, v! |; }
for k = 1:length(X)0 R  @' H+ t. P1 K- C) m
x = [X(k) - xlength, X(k) + xlength];/ K7 z: x$ @( \+ U! v
y_h = [Y(k) + E(k), Y(k) + E(k)];
; a4 G9 B7 _  [* z line(x, y_h);6 E/ w2 x/ a) e+ q! w0 G
y_b = [Y(k) - E(k), Y(k) - E(k)];
4 b3 A& s" b; V! z. v) `* X line(x, y_b);
: \, V) V, H* Y0 f6 Yend0 X. ^# c$ Q' h
参考:www.52ocean.cn $ \) Y/ b2 W1 j) N

3 N" T. \! O2 t) Y2 m. p5 N& g9 R0 K) ?7 K
                    3 Y1 H/ c: W0 {
8 C3 h3 J0 ?7 s) c6 D4 A
                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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