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

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。& ^/ _4 A9 ^' R& b& `
实例:+ Y* A( @# |5 t4 E6 h  J
% 数据
" [; a' D& h! N$ {. evolume_mean=[0.73,0.45;( _1 p0 s/ K. e6 [6 `5 R& ~
                        0.42,0.43;- u7 l0 h4 q3 D" U  l1 j
                        0.70,0.42];                        
# w# a2 _& b& L' Kvolume_std=[0.65,0.17;
, E, M5 {  K" e$ R/ H  h# L                     0.35,0.14;
' b* ~, ^3 S, @8 p( m7 ^4 }% l9 i$ r                     0.44,0.13];
/ N4 _& Z: m8 n0 Q: S- z%绘图                     
$ Z/ ]9 x5 o; Fclose all;figure;. m& ?# s& ~) A3 Q( z+ @
h=bar(volume_mean);
* q2 O% D5 v& n. pset(h,'BarWidth',0.9);        % 柱状图的粗细7 o7 V, J* v- V
hold on;* u" p2 h. Y: e; W/ K/ e. L
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
6 o8 W$ z6 }8 Xset(h(2),'facecolor','k')        % 第二列数据视图颜色
, d2 U1 M& B  o5 H9 m: I3 a
: u  V6 Z9 O( N3 H% a  H+ ?1 ]: P* q) p) F1 Y. r0 z& q  g3 p; O: o; E4 `+ x
ngroups = size(volume_mean,1);# h4 C3 l( S/ H3 N- L! e* f
nbars = size(volume_mean,2);. {) F, Z8 J' Y" c/ h. ], ]
groupwidth =min(0.8, nbars/(nbars+1.5));
! [$ `9 x$ T: N! i8 @' b
+ V3 t+ c- v' i$ X% ^
0 f7 z. t3 A" ^$ y( ~8 o% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap
0 o: V0 T% V  y0 p+ r%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red$ i9 B5 l4 K  e( C( R
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];
/ ^* R# C  S2 e& vhold on;
8 `, N1 ^' t8 V+ B+ {4 i+ c  Rfor i = 1:nbars
: A* a) `6 `1 x8 J: e    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);7 m" p1 [1 ^* z6 B8 |  p0 p! c
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);
2 W- Q- P3 ~$ ]- R% p8 E/ j+ z& bend/ `0 p( ^9 t# n* T" i0 F+ e
. `( ?# i9 o2 }4 V9 m

$ |& v) Y% A% w1 |7 V- x2 aset(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)5 `( N. n+ v# d9 E
ylim([0 1.5])
+ o% v( O: D3 f0 V. K% l5 c: B$ U! }4 Tset(gca,'ytick',0:0.5:1.5)& s) a" U+ W% e# b8 g: b5 H
xylabel(gca,' ','Volume[Sv]')) o8 O9 J7 x' Y* r4 h3 B
legend('data1','data2','location','NorthEast'), x1 Y( x5 N7 z* ]9 D; d# E& x

5 }. L4 o3 B, Z* H3 N' ?
$ G% d( O- R  B6 A) R以上实例可以参考使用。; {) C# ]6 F3 b2 E

. O$ v  e; I% C+ ~' F3 l6 k, H
5 z, S3 S. ^/ t  v, \errorbar的局部调整:# @7 y; ?" R9 }+ ]% h
1.头部宽度调整
) ^; Y# p7 ]$ k9 Z0 i% Create errorbar
4 ?; X, e% f- D6 rX = 0:pi/10:pi;
5 ]7 Q8 o; m) i. R4 _, {5 ^Y = sin(X) + 1;
9 B8 E/ o" H: Y* @E = std(Y) * ones(size(X));8 j4 A5 u4 v: o* l4 S+ w* Y
ha = errorbar(X, Y, E);
; |) Z0 H/ g  }7 g" b% Width of the top and bottom lines of errorbar
0 J! o& J; V$ F) _* E" i; R, D' r0 R) Wxlength = 0.2;
* q3 r) U! D" v9 i$ w+ G- {% Make horizontal lines with 'line'% G( ]# _; m$ [) K0 D( o
for k = 1:length(X)
/ V5 u4 @# l: O/ m# [ x = [X(k) - xlength, X(k) + xlength];! s" f: f4 d# f" D5 }5 b
y_h = [Y(k) + E(k), Y(k) + E(k)];
- }$ S0 K% e+ {5 u, S line(x, y_h);
* j( w( ]1 q! [; @ y_b = [Y(k) - E(k), Y(k) - E(k)];
" b) g9 E# d( n8 G' ^5 b3 F' j line(x, y_b);) K! D+ s7 c2 L6 @
end) P, |. A: n5 o' C6 A8 M
参考:www.52ocean.cn
3 i* Z1 _# p7 \' |3 L' K( S! P
. r9 J( B. {$ q* F
5 y: x9 v; a0 p+ U7 x                    4 n5 @" ]: _2 D! |/ Z

/ f( l! Z8 m# C: |$ D( C0 d                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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