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

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。  y' a; |! p3 W" L$ q2 r
实例:
+ P8 R5 ~; k  Q+ @, M6 u% 数据6 `* H# F( A" J9 h
volume_mean=[0.73,0.45;
/ X; J  b# I6 b                        0.42,0.43;
% K* K' F1 o& |% K( R                        0.70,0.42];                        
( I8 b4 n' X( |. ~1 kvolume_std=[0.65,0.17;
/ u& F  M  y  a4 Z. V+ @                     0.35,0.14;; f8 e) q( r, e4 n4 V+ l' x
                     0.44,0.13];
  N! t9 u' M" }5 ^2 _%绘图                     & |1 P  x# A) P5 W/ w
close all;figure;
" D8 }1 J! H$ o/ b, p9 x0 s9 ]' Ah=bar(volume_mean);
& ~% u- s! G; _- b' y. J) h; aset(h,'BarWidth',0.9);        % 柱状图的粗细
$ B/ p# U  m- C! D! e+ k5 j8 Ghold on;
* S* P- ^% _5 F( ~9 n; q( H/ E  @7 yset(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
  x- a1 Y0 g( V5 p! q* u3 p, uset(h(2),'facecolor','k')        % 第二列数据视图颜色0 z" m% I) k- f/ e
# m! m$ S1 z3 H

* K2 }5 o" p) R$ ^ngroups = size(volume_mean,1);
- X) `5 K1 l* W/ nnbars = size(volume_mean,2);
+ ?* J' N; X- Q% mgroupwidth =min(0.8, nbars/(nbars+1.5));
, w: f& d' U! ]5 O
- O" i  y& K* o: [1 ]- K7 `% a' V
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap- t0 L# h3 B; }- H
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red' J" b# g4 A* |7 F
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];- i* J  u4 T) {5 w
hold on;
2 b8 Q% q5 |& U( I) z6 Q) \: Lfor i = 1:nbars
+ U, V: v' w! ~) L& F    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);
: i0 x& I4 n$ Q# \' e  H    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);+ j# T8 `7 T- Q4 Q: ]; I
end& G1 b2 C' v- y- x& m
* Q: M! ^5 x% I7 k

3 O9 X9 a; b( y0 x8 Jset(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)
! ^; n' Y" n! M8 Y. Vylim([0 1.5])3 G4 n  z3 W+ q# J* z8 F
set(gca,'ytick',0:0.5:1.5)
/ y. v# _' B* Sxylabel(gca,' ','Volume[Sv]')
* k6 @4 v5 S/ q* xlegend('data1','data2','location','NorthEast')
, a% e' B. T/ V1 h. f! |) q) n: z7 H' ], s$ ~) r
2 R) \  z$ G: H; I: C
以上实例可以参考使用。
0 b# g) g9 {, |) D
. S* P" b: \2 ?1 e! J
' x0 S  ^5 A1 q7 j0 Uerrorbar的局部调整:! j: i' L& B( f* L: m. m; ^
1.头部宽度调整
2 q) I3 |6 P3 w+ G- _3 o7 W0 V. W5 }% Create errorbar8 ^  {+ u% K  g+ ~/ e- ?/ l# s
X = 0:pi/10:pi;% J3 r' S% k4 u
Y = sin(X) + 1;# m" g) Y2 P7 q2 h' R$ R6 u; X/ A
E = std(Y) * ones(size(X));
9 [. K9 J8 m: Y  a$ Qha = errorbar(X, Y, E);: ?2 _, o% F5 H4 A
% Width of the top and bottom lines of errorbar
# m# d0 w8 M# Kxlength = 0.2;
: F  q2 @! [6 l% Make horizontal lines with 'line'
4 T* H  |  m: \for k = 1:length(X)0 [/ i7 D* f; W4 l; s$ I5 U
x = [X(k) - xlength, X(k) + xlength];
% j( n, Z: j! A. i. `' v9 k y_h = [Y(k) + E(k), Y(k) + E(k)];
7 z3 ]+ q( M: `& k2 j! @ line(x, y_h);
9 j5 I/ f4 ]& B7 A% @' L2 b+ B/ J' ` y_b = [Y(k) - E(k), Y(k) - E(k)];
0 S" t* m4 c. E9 S line(x, y_b);, a2 h6 ^9 V; X+ Y8 h9 ^( ]$ f
end
0 t8 P  V) Y  o参考:www.52ocean.cn
& t% g, Z3 K# r" s0 }% v3 B* c7 J
. y! b0 z4 }6 c2 l9 @+ L& F! F* I' _* E' {: O
                    * o% ?) r! \+ U1 I* B4 }. b3 g2 R
) o- V% \  d, c+ Q' t/ t8 C
                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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