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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。8 @) |$ o+ }- V
实例:2 B' K& a! Y* C2 @/ q' Z! r
% 数据
  o' Y; T7 z; ]! X; `. y) Qvolume_mean=[0.73,0.45;  A+ h3 y% a" y5 u& s% s
                        0.42,0.43;
/ |8 j7 n1 E) i! Z6 e7 w9 q                        0.70,0.42];                         5 T- m$ p3 t, Y: r  z8 R, F0 _3 F2 I2 u
volume_std=[0.65,0.17;% P* T, O, e' \7 y9 `" \
                     0.35,0.14;
' C1 f- }+ ~% e  O                     0.44,0.13];
/ s- ?0 Y& H' W/ ^* E  s9 }" [%绘图                     
. T; e& z  n/ _1 l' s0 q/ N! ?% g- ~close all;figure;8 {2 o$ @7 H5 f1 Z& v+ \
h=bar(volume_mean);
, x  Q) T/ p$ x4 e* `3 xset(h,'BarWidth',0.9);        % 柱状图的粗细
/ M/ M! l1 X: D3 w2 U  z! R- I) D( Shold on;
0 P# j; @# A$ f% ?' a& J! \set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色. a( j& C- X) H; Q' s- Q5 v1 g& N
set(h(2),'facecolor','k')        % 第二列数据视图颜色
4 U" m7 ^1 Y4 y2 Z! X! {
& a  S' T# y9 ?+ b- Y) S3 {' }0 a% l3 ~: b+ K+ e
ngroups = size(volume_mean,1);3 o: d* e2 U$ L0 t3 e% x1 d
nbars = size(volume_mean,2);3 t3 b' {" I2 \( h: b
groupwidth =min(0.8, nbars/(nbars+1.5));
6 k, q+ r4 m2 u/ @  W
6 c: W& w( X1 Z6 m3 v$ U  t1 k3 O
8 P) p/ F: ?' V' s$ _6 G' F; n% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap
# C+ o8 P9 U: n% Z* F2 u+ w/ [%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red
  L# R8 J# \( c( q2 `% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];; E" W2 a: \; E! Q
hold on;% S  k( J2 c9 r0 Q* o' P7 o
for i = 1:nbars
+ R( R% e7 Y3 Z) b6 D3 M; A( C    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);+ f$ ]2 P5 ?. \
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);4 ~3 [: O5 d2 M  q; u; d3 d" l
end
  |+ D" z, a" M9 F9 w0 h7 z1 g8 Q: }# F7 Z. q8 Y4 L1 V2 D# x0 r
7 T9 i0 d8 E9 c* C6 {* V1 V/ S
set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2), ~$ ]+ W9 a8 I& y5 ?
ylim([0 1.5])
$ w) c0 H, c# d- Rset(gca,'ytick',0:0.5:1.5)  V! r( a3 d. o# v* v6 m/ C
xylabel(gca,' ','Volume[Sv]')% x3 G8 N0 [- m) e. f# }) A* [
legend('data1','data2','location','NorthEast'); j0 ]7 }: B, k6 F) ^  _& m
, u! U4 ]( \7 n- e
) ^2 b' B. ?# ~1 d" y; t
以上实例可以参考使用。
- M- Q% R% G3 B; x4 @; c! v4 [$ q. ?( H

* _6 [8 q8 \" ?6 @1 k9 P, Ferrorbar的局部调整:
( n3 q4 G% ?% W1.头部宽度调整' K% v# j4 k4 M' T% N
% Create errorbar
: g* l+ y6 G% a4 @* u( V  c+ YX = 0:pi/10:pi;- x1 `1 x: T0 F, \
Y = sin(X) + 1;$ O1 e4 j  Z3 U9 U4 E6 ]% Y
E = std(Y) * ones(size(X));
5 `& T/ w6 F8 Bha = errorbar(X, Y, E);- A' ^. D' p. W3 ^. }! [
% Width of the top and bottom lines of errorbar& j; z9 G* ~# y5 T' O5 P
xlength = 0.2;+ D6 V: i2 d: A8 W- \0 W+ D
% Make horizontal lines with 'line'4 X; a7 D; ~2 f1 M4 ^/ \: J
for k = 1:length(X)
2 _. S3 v4 o: p6 x( h x = [X(k) - xlength, X(k) + xlength];  R: A$ \4 v7 T" T% k+ s2 \# A
y_h = [Y(k) + E(k), Y(k) + E(k)];
: i# I9 E) ?% F3 p7 s( F- N, K line(x, y_h);" \: `  A7 L: G4 H
y_b = [Y(k) - E(k), Y(k) - E(k)];
. O1 {' Q# b; ^. M6 W line(x, y_b);  w# |5 y4 {: F
end
# P0 |. q% }5 W6 \  b参考:www.52ocean.cn ! [2 I( H$ r- }- g; d0 U/ \
" X6 A- u, s. a

2 p  J+ j8 Q& f8 g0 @% Q2 b$ v6 f& s                    
2 ?( Q7 X+ {* k$ i- Z
7 Z* l! \( q% k. A: c  ^* X                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。

相关帖子

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