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

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。2 [. q& ~$ C5 W9 P! w0 d/ n
实例:# W! z( O  M$ D6 \4 U$ s( d& R
% 数据
, Q1 L9 o/ p) ^3 Z3 P" C' N: |volume_mean=[0.73,0.45;% r4 p& q( A$ x
                        0.42,0.43;, z- ^! y/ _# l, J4 ?+ M, a
                        0.70,0.42];                        
7 |; _/ O7 @3 I$ [* |9 Lvolume_std=[0.65,0.17;
" {) b4 a9 U  _3 G7 Y' [* U                     0.35,0.14;
, d8 D& w" G9 M( W7 |8 g                     0.44,0.13];
/ b/ B* F  l9 P1 E" A# O%绘图                     
! l8 z. z( X9 [0 S4 e+ lclose all;figure;, X. {, j) J( D- M
h=bar(volume_mean);
: q! B% f3 e8 L/ P! Nset(h,'BarWidth',0.9);        % 柱状图的粗细: T1 N5 i# ~8 x  k: p0 p
hold on;
, R! A0 Z) Y: h; I" E' }: _' B8 sset(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
) H1 _- ]; q% H4 k# m, jset(h(2),'facecolor','k')        % 第二列数据视图颜色7 x6 N9 V# A" A
( f7 Q' m: A$ M7 x; w0 \  _
$ ]5 o2 B% e* T" G# L
ngroups = size(volume_mean,1);5 @/ e* J6 I4 O" n% a
nbars = size(volume_mean,2);
. [9 D2 k* \0 igroupwidth =min(0.8, nbars/(nbars+1.5));
' W1 l/ c2 J! K4 j! }! i
! i: e) N3 [( T
1 d/ N6 @$ r- H6 {' E5 Z2 k. v% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap+ V& e5 I- y) F& V7 ?. T
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red
4 V- v" d. ?# A0 ?+ u  M# z0 U3 q% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];
. H! B! B/ D/ x% v0 n. A4 O% ahold on;3 W2 L) A  K2 _: c7 a: m' n
for i = 1:nbars4 g! {' e& A5 i) A0 V; A
    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);7 S8 l0 @& k- n* h5 H
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);4 h! D  M' t" ^, z
end. K* t+ ]  ^1 [) L5 `, \

' s, w9 |% K, I+ h: @$ }. e+ l+ Q+ _4 [- \; a' L( y2 `2 y
set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)
! f* f3 S6 }5 M9 [8 B9 X* f5 ~6 qylim([0 1.5])
; R8 C; z3 P9 g& i6 x+ b; vset(gca,'ytick',0:0.5:1.5)3 V( a& x9 e1 k6 y8 G# `0 l: \' d. v
xylabel(gca,' ','Volume[Sv]')% d) ]: K$ E7 e$ I! s
legend('data1','data2','location','NorthEast')
# j. w) r0 Y9 Y* R/ x: Q7 ]8 h
5 e& H& ]  D) o3 z
9 z9 e0 |1 ^( D+ \! X5 r以上实例可以参考使用。
; P9 H3 W5 {4 T& @
% ~0 R+ r, A" i  z' u, Y5 @; ?3 ]6 S7 M! |& i& q
errorbar的局部调整:
  G" S0 D; ?. F7 W. z/ P1.头部宽度调整9 _% ], v# g- E" A
% Create errorbar
. r# }7 ]/ o3 G5 ]" d3 WX = 0:pi/10:pi;
0 t& s/ o8 ^0 ~1 H! X3 U6 C  }Y = sin(X) + 1;; q+ m3 l: ^9 C1 `4 A  i8 l
E = std(Y) * ones(size(X));
- d. C7 {0 J2 f1 M3 y. ^( Q% @ha = errorbar(X, Y, E);
/ p$ f# o% [2 ^  r% Width of the top and bottom lines of errorbar* G- h& O1 Z, [; I/ i
xlength = 0.2;
- y/ z& i3 v5 W% Make horizontal lines with 'line'
! P1 z/ {- Y  R& I1 qfor k = 1:length(X)
  ?" q' x! h7 o- [' L" N3 ? x = [X(k) - xlength, X(k) + xlength];& t/ D9 l2 r+ F& x$ i" S% @' c2 M& t
y_h = [Y(k) + E(k), Y(k) + E(k)];& ^" _( _1 n( @  s; d
line(x, y_h);
4 P2 H& l8 ]6 X9 ` y_b = [Y(k) - E(k), Y(k) - E(k)];
1 j, y: T% |9 ^5 { line(x, y_b);
; \- G' e, Y- L- x# f& Aend
, m3 e* {8 M' G参考:www.52ocean.cn
1 C. X& Z  \5 x+ v- n  O9 t; }! P: t% |+ Y) T6 C# G

& T; s! r6 }5 J* ]* q                    
: M( n# p* l& d9 t4 k- w! E" o
; X5 H* p9 b. B" e3 k                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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