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

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。
1 C9 \/ {$ m% e1 V% Y! J7 A2 ^- {4 Q' B& Q实例:8 V4 W& v1 T) n3 l: P, _2 O
% 数据
. v* G' a7 D3 K6 Qvolume_mean=[0.73,0.45;2 H7 s8 B, U  N  M+ r
                        0.42,0.43;" ?; Q. u6 I5 a% p- N
                        0.70,0.42];                         ' k" P$ D) o. q4 t5 V
volume_std=[0.65,0.17;
9 H- l2 p2 X6 C" Z) T# N                     0.35,0.14;$ u. Q6 b' ^1 i% T
                     0.44,0.13];9 p) S0 s% {6 A; S& K  f% e3 j
%绘图                     $ S; Y. a8 D5 D* l8 A
close all;figure;& n1 q2 {+ m" t7 J1 v6 k- ]
h=bar(volume_mean);
7 M/ ]4 G8 Z6 i5 Q# C4 D% `6 k# q$ Wset(h,'BarWidth',0.9);        % 柱状图的粗细
( E2 ?' |5 c! f- [hold on;' H  x  k6 B/ y/ d+ M! T
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
+ b; J  d6 A* L$ d* a* gset(h(2),'facecolor','k')        % 第二列数据视图颜色7 m  l/ n, P' r+ n$ [
9 }9 Y* L! r3 G& k% T, ~% L
8 p1 O% ?+ \+ g# _3 B0 J$ H
ngroups = size(volume_mean,1);
( l0 w0 t& P" jnbars = size(volume_mean,2);# X. u& ?  ]# u. I
groupwidth =min(0.8, nbars/(nbars+1.5));
! f& h: k: S( ]/ t7 y0 s3 h' C
: v. Y% S9 g, s" D5 J1 d  F. I* V" F& D2 R5 E1 }9 E: T% t
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap
. a$ {2 S  T: Q6 t5 X( \' x3 @%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red
' V  C. Y* E7 B! k  b' b% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];6 e! I% I1 H" G; z; C: e* k5 q
hold on;9 _3 [' R3 e& }
for i = 1:nbars
: l/ O1 D0 h- ?8 C    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);
: Q* T4 r( ~9 B  a# P' g4 J) @    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);# A. b* @: J- V$ h
end
5 d. s/ \1 N" y2 [& p, g  s* V7 |/ W6 @
; |: f0 X/ j  N) t3 C. B$ H$ p
set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)' z& l; o! h6 q* f2 w
ylim([0 1.5])3 b5 z9 I1 l7 {: N
set(gca,'ytick',0:0.5:1.5)
. A( e* @& o+ W! X1 E% ixylabel(gca,' ','Volume[Sv]')8 j' Z! @- Q( n3 U" C+ H3 Y3 O( \6 j
legend('data1','data2','location','NorthEast')
7 Z, U1 }$ p" L. D7 u
* D0 _! L9 `" X' A' S: b) O5 e$ W: o2 `9 S( J1 v' u
以上实例可以参考使用。
% O* w+ m  H8 x. \! F* S8 w; t- k! P* [+ x! B# L7 B% }
* A4 q& O! b- L. L9 L
errorbar的局部调整:
, e2 e' M- e) F; T6 I$ ~1.头部宽度调整4 N1 ]+ s; D! ^) Y
% Create errorbar1 {$ y, _* R8 h  M0 T
X = 0:pi/10:pi;
) v' a  Z/ C) E% H% X4 TY = sin(X) + 1;/ `/ N2 e1 h1 S" C1 T! ~* o. z" h
E = std(Y) * ones(size(X));% }) }. P+ T$ F& I# h9 R
ha = errorbar(X, Y, E);2 O& R2 {) e* z& Y' ]. C/ P
% Width of the top and bottom lines of errorbar
% A& g% K9 \* o% O7 y6 axlength = 0.2;
% }$ F  A3 b6 a! j. j6 n$ {% Make horizontal lines with 'line'
( a1 r0 ]" [0 x; Z  c+ Wfor k = 1:length(X)
  w! @" P5 D+ @! Q% H5 Q, w x = [X(k) - xlength, X(k) + xlength];/ E! J  ~  r2 U0 S/ J
y_h = [Y(k) + E(k), Y(k) + E(k)];
4 O: u, U0 k- d: D) W  E$ A4 C" { line(x, y_h);9 E1 @7 o9 D  ~1 h
y_b = [Y(k) - E(k), Y(k) - E(k)];
" T7 O2 N" t( `1 i line(x, y_b);0 A$ x! z0 k! O5 h
end' G8 k  X3 E( Q" W% Z9 f( q
参考:www.52ocean.cn
" J4 c- A7 \3 U. B! l' }" K. S/ q, Q
" U7 |8 o, |. u! A' l
) i& W3 B- e* H2 g. U! R. h                    
2 g3 S) {. B  g7 V! n' Y! c+ k, _2 r& i+ W
                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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