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

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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。0 v1 F  V' U2 \4 B
实例:
1 H* t! I+ j- _% 数据
! {3 y# }+ M8 v2 `+ k7 k7 Jvolume_mean=[0.73,0.45;0 ~5 x: h. H, O7 |9 p) u
                        0.42,0.43;
. B2 ]2 k" K: U6 @3 g                        0.70,0.42];                         1 Q( e! C* A3 A
volume_std=[0.65,0.17;# ?1 X/ V7 ]5 _9 n! b1 a) _
                     0.35,0.14;
2 x1 {/ z' ^, b) w                     0.44,0.13];
& c. p7 f# `5 K7 H%绘图                     
# l) q. `! N% Uclose all;figure;
' _! V3 ?. t6 N; E: R+ S0 r; N& O& Gh=bar(volume_mean);. E5 W/ t  T& d' t
set(h,'BarWidth',0.9);        % 柱状图的粗细
# l9 F4 U4 j7 Z% {) t, G6 }hold on;, l  Z/ I. u3 ~$ A- ~
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色6 G8 x3 _- f8 J: ]! b# O' U% s0 e1 q& s
set(h(2),'facecolor','k')        % 第二列数据视图颜色" \1 k2 P! k" o+ T9 o7 W1 x$ p& Y
& q. z5 C* \. I; i7 ]# K5 i

- C: ~) f+ p% sngroups = size(volume_mean,1);
, E: W2 N) ~- r2 Lnbars = size(volume_mean,2);
, c+ f" m% q+ s1 cgroupwidth =min(0.8, nbars/(nbars+1.5));
" l" A& r2 p' y  p) \
1 K; K1 e5 ^* o; i: `# T; e3 D' Y3 m6 G$ v
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap# ~/ f7 p0 m0 B! [+ W2 C, U/ R, p
%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red+ Q. D6 E: H  m0 ^5 Z* s- W
% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];3 u- ^: b% d  g
hold on;3 u" Z0 c$ |4 m4 {
for i = 1:nbars, ?  N* t: K" D! q4 D/ S  [+ U& P
    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);& Y) x* n* o) X3 s) b; \
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);
' U' n# ~! p' j4 ^8 ^' Pend1 l, y/ I. X; ]7 Y7 S# |- N- G- E
# A3 l+ ^$ t% S; c. E

; m( |$ W" u# G8 b3 `3 O0 s, {set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)' u- r  D% f8 ~
ylim([0 1.5])
, m' m+ s2 x- y, G( k4 wset(gca,'ytick',0:0.5:1.5)
/ I( y  `( ^  q6 Zxylabel(gca,' ','Volume[Sv]')9 _7 j- ]4 R& f& w1 `/ ?8 O: k' Y' W
legend('data1','data2','location','NorthEast')
2 W3 n5 i, B, _7 V# X! i" D. ]8 ?" ~9 d
- ~- X8 Z5 x5 t7 g) c- v! O3 U5 _
以上实例可以参考使用。
0 M7 T4 i6 X$ T' }4 L# N. A$ ^' c: y, |6 L9 Q7 A% ~

! v# Q6 _) T* N* p1 Rerrorbar的局部调整:8 M, n7 s' T* |
1.头部宽度调整
' q5 B4 {/ a/ `) T: ~) \% Create errorbar0 w9 \% _; X+ i8 M& X9 T
X = 0:pi/10:pi;
. x+ f3 ~* d+ F: U/ Z  ?: @3 @Y = sin(X) + 1;
1 K# f$ T  Y1 z: A1 S- |E = std(Y) * ones(size(X));
  V) O4 E* ^( e" Sha = errorbar(X, Y, E);
* Z- f3 Q9 _0 ^- z9 O2 Y# R5 O) c% Width of the top and bottom lines of errorbar% P: E" Z* p! B- e( d0 h1 p
xlength = 0.2;2 X: w, E- P' F. S# v/ P" a
% Make horizontal lines with 'line'! X5 A) X( D3 a7 Z
for k = 1:length(X)0 ?' X  M! r3 }5 z) s8 r" E
x = [X(k) - xlength, X(k) + xlength];
. a, X5 @- X& d0 S y_h = [Y(k) + E(k), Y(k) + E(k)];7 C8 Z2 k3 O8 \& J  `0 i
line(x, y_h);) X# B5 }8 \! D5 t" [) A
y_b = [Y(k) - E(k), Y(k) - E(k)];
4 P6 L6 @' e* Y: W- B) U3 H/ j- E line(x, y_b);
8 }# x9 v  O5 u+ jend' I) Q9 h9 H4 _! }" s
参考:www.52ocean.cn $ m! D, H2 M5 F) z4 f, \% v% \6 P

- Z4 D1 d: q) \+ Q2 L7 a* L% E9 W3 H) [6 g
                    " d& A  E4 J$ Y3 v$ C

2 x& g9 @; |2 g5 ^3 E                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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