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

[复制链接]
在数据统计分析时,往往会用到多个数据分组进行比较,这里介绍一种数据可视化方法。
6 Y/ J( q/ S) ?% Q实例:
" U" H" A3 L6 w5 G" o5 m( Z& K/ Q% 数据
- y; X2 s) h4 i# a& g8 i, ?. {volume_mean=[0.73,0.45;
7 }/ c) f1 s. q; b7 z2 C                        0.42,0.43;
4 J5 u3 c9 k  [! W2 }                        0.70,0.42];                         ! E5 n* V3 z+ u# P
volume_std=[0.65,0.17;
6 E) w) A2 u+ G+ N0 }0 o0 C- B& F                     0.35,0.14;
. k0 z0 x% I" z9 H3 n2 O                     0.44,0.13];2 G# q. o- m2 [
%绘图                     8 j9 {4 n2 B+ }  u6 L7 [+ \) y" `
close all;figure;, @4 p3 t  U  C* g
h=bar(volume_mean);/ s2 E' T: Z6 r, s% R/ ^& h3 y
set(h,'BarWidth',0.9);        % 柱状图的粗细) M* G/ e5 l, N4 M5 b, m
hold on;+ L# v$ ~  f. M8 b; Q# B3 z
set(h(1),'facecolor',[139 35 35]./255) % 第一列数据视图颜色
5 p+ g. h" U$ Y* I$ Rset(h(2),'facecolor','k')        % 第二列数据视图颜色
4 ~- Z2 x  p. D* Q: P" _. I
1 Z) y6 u4 ?2 v# x% u+ @! J/ ^# s# R' o1 I
ngroups = size(volume_mean,1);1 j% B( K$ |: h! Z7 D
nbars = size(volume_mean,2);0 t. H% i, ?* R
groupwidth =min(0.8, nbars/(nbars+1.5));
% |: _7 P/ \" a  ^; o5 ]8 t- l8 u% a0 x+ b2 q0 U' P7 b
. M$ w5 L  L, K7 M
% errorbar如果用不同颜色,可以利用colormap的颜色进行循环标记,这个例子没有用到colormap
& r# {& _" g  Z9 {$ F%colormap(flipud([0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1]));   % blue / red
- M3 D# _# z, c0 }( B  n% color=[0 100/255 0; 220/255 20/255 60/255; 1 215/255 0; 0 0 1];
7 z5 y/ K% [: v! e# @2 V/ ?hold on;
- J! _1 [; L' ~for i = 1:nbars+ b; D  o* T4 q* g0 T; l5 g
    x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);" T# c' J& h+ O  d8 H
    errorbar(x,volume_mean(:,i),volume_std(:,i),'o','color',[.5 .5 .5],'linewidth',2);
* s, M0 B5 {- |( V. h* X( C! G9 W) h4 Lend5 K+ s1 S. M5 n' ^

& Q9 P: W* r0 F9 Z# H  T" r' _2 ^6 I" [3 R
set(gca,'XTickLabel',{'2014','2015','2016'},'fontsize',14,'linewidth',2)
& E0 o: r  i( C: s1 b2 Z- B2 [# Oylim([0 1.5])- T1 w9 e+ J2 m1 S, o4 N
set(gca,'ytick',0:0.5:1.5)% l/ k4 H- s- G! y1 s; Q' s+ `/ ?
xylabel(gca,' ','Volume[Sv]')
0 K. G  j, ^/ g" B* [" i& ?legend('data1','data2','location','NorthEast'): t+ f, n+ n2 I) k8 D3 t
; ]0 {% v8 ]; d: c2 m/ h  [  {! j

& k4 s$ ]: Y" P  G# i* Z以上实例可以参考使用。( g) i( |6 @# |8 U* u- ^% g

8 T( ^% L8 M4 P! m2 M( K8 E$ r" b' h! ?& l' ]: o  x, f
errorbar的局部调整:3 l) k( t9 `4 `) U9 N$ z* x
1.头部宽度调整8 K8 u% X* h! z3 |; x
% Create errorbar1 Z( ^$ c/ ^& g7 ]7 J- z
X = 0:pi/10:pi;' f4 A8 e6 E* p7 v# w; x! a
Y = sin(X) + 1;
5 K+ ~% c2 G! K2 t& j0 G5 [E = std(Y) * ones(size(X));6 o) S5 B1 @3 f8 n* C
ha = errorbar(X, Y, E);4 G: o' I+ Q# x/ ^
% Width of the top and bottom lines of errorbar9 z$ c* c( Z' [/ o7 A
xlength = 0.2;9 [' H3 N3 A3 b( h0 A& _
% Make horizontal lines with 'line'
. x- a0 r; x, [* R" u% ^+ Sfor k = 1:length(X)
! Y9 a4 i0 j/ @ x = [X(k) - xlength, X(k) + xlength];
1 T& K; @, p0 A) [9 r y_h = [Y(k) + E(k), Y(k) + E(k)];
" _( E8 S# W+ v2 _6 w0 J line(x, y_h);
8 Q, V) K  X6 ?  C! P y_b = [Y(k) - E(k), Y(k) - E(k)];
& p; ~0 G$ a  Z, Y line(x, y_b);
0 Q2 ?9 ^  ?# N" _+ }2 ~7 bend
) K) X& E8 c, a9 m: E$ f3 ?参考:www.52ocean.cn 1 L  F1 w1 |. c: \( x

$ i% A0 ~+ V6 i8 k# t: Z/ k  R
6 |" x$ `' R& i; V5 I                    
# r* b. ?( L# s4 L/ N! a& _9 ?2 C
                                        转载本文请联系原作者获取授权,同时请注明本文来自叶瑞杰科学网博客。
回复

举报 使用道具

相关帖子

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