误差表示errorbar and shadederrorbar
1. errorbar
ErrorBar(误差棒图),是统计学中常用的图形。ErrorBar图涉及到数据的“平均值”和“标准差”。
下面举例子理解误差棒图中涉及到的“平均值”和“标准差”。
某地降雨量的误差棒图[1]如图1所示,从横纵1月份的刻度值往正上查找时,可发现1月份的降雨量对应于一个“工”字型的图案。该“工”字型的图案的中间的点对应的纵轴的刻度值(大约12),表示该地1月份的降雨量的“平均值”,大约12cm。而“工”字型图案的上横线或下横线所对应的纵轴的刻度值到中间点(即均值)的差值大约为0.5,表示该地1月份的降雨量的“标准差”大约为0.5cm。
图 1 某地降雨量的误差棒图[1]
图1的例子来自参考文献[1],matlab代码如下
%各月的平均值
Average=[12,11,7,7,6,5];
%各月的标准值
Variance=[0.5,0.4,0.3,1,0.3,0.5];
Time=1:1:6;
%函数调用格式 errorbar(A,B,X)
errorbar(Time,Average,Variance)
xlabel('月份');
ylabel('降雨量/cm');
图1显示的是纵向“工”字型图案的errorbar,并且“工”字型图案的上下横线到中点的距离相等。参考文献[1]中还有其他形式的纵向的errbar的画法,比如“工”字型图案的上下横线到中点的距离
不想等的情况。参考文献[2]中还有横向的“工”字型图案的errorbar的说明。可点击参考文献[1][2]了解更多关于errorbar的内容。
参考文献:
1.《Matlab绘制误差棒图(errorbar函数的使用)》
2.shadederrorbar
shadedErrorBar
是一个MATLAB函数,它在一条线而不是离散条上创建一个连续的阴影误差区域。可以显式指定错误区域,也可以根据函数句柄动态计算错误区域。可以通过输入参数和/或返回的绘图对象的句柄来修改绘图的外观。
shadedErrorBar,并不是matlab官方提供的api函数,而是一位大佬提供的,其开源代码和英文介绍可查阅参考文献[3]。从某种意义上来说,与ErrorBar不同的是,ErrorBar图中“标准差”和“均值”离散分布的,而在shadeErrorBar中则是连续分布的,
1、首先准备下载shadedErrorBar.m函数代码,github下载
在此我给出已经下载的代码
-
function varargout=shadedErrorBar(x,y,errBar,varargin)
-
% generate continuous error bar area around a line plot
-
% function H=shadedErrorBar(x,y,errBar, ...)
-
% Purpose
-
% Makes a 2-d line plot with a pretty shaded error bar made
-
% using patch. Error bar color is chosen automatically.
-
% Inputs (required)
-
% x - vector of x values [optional, can be left empty]
-
% y - vector of y values or a matrix of n observations by m cases
-
% where m has length(x);
-
% errBar - if a vector we draw symmetric errorbars. If it has a size
-
% of [2,length(x)] then we draw asymmetric error bars with
-
% row 1 being the upper bar and row 2 being the lower bar
-
% (with respect to y -- see demo). ** alternatively **
-
% errBar can be a cellArray of two function handles. The
-
% first defines statistic the line should be and the second
-
% defines the error bar.
-
% Inputs (optional, param/value pairs)
-
% 'lineProps' - ['-k' by default] defines the properties of
-
% the data line. e.g.:
-
% 'or-', or {'-or','markerfacecolor',[1,0.2,0.2]}
-
% 'transparent' - [true by default] if true, the shaded error
-
% bar is made transparent. However, for a transparent
-
% vector image you will need to save as PDF, not EPS,
-
% and set the figure renderer to "painters". An EPS
-
% will only be transparent if you set the renderer
-
% to OpenGL, however this makes a raster image.
-
% 'patchSaturation'- [0.2 by default] The saturation of the patch color.
-
% Outputs
-
% H - a structure of handles to the generated plot objects.
-
% Examples:
-
% y=randn(30,80);
-
% x=1:size(y,2);
-
% 1)
-
% shadedErrorBar(x,mean(y,1),std(y),'lineprops','g');
-
% 2)
-
% shadedErrorBar(x,y,{@median,@std},'lineprops',{'r-o','markerfacecolor','r'});
-
%
-
% 3)
-
% shadedErrorBar([],y,{@median,@(x) std(x)*1.96},'lineprops',{'r-o','markerfacecolor','k'});
-
% 4)
-
% Overlay two transparent lines:
-
% clf
-
% y=randn(30,80)*10;
-
% x=(1:size(y,2))-40;
-
% shadedErrorBar(x,y,{@mean,@std},'lineprops','-r','transparent',1);
-
% hold on
-
% y=ones(30,1)*x; y=y+0.06*y.^2+randn(size(y))*10;
-
% shadedErrorBar(x,y,{@mean,@std},'lineprops','-b','transparent',1);
-
% hold off
-
%
-
%
-
% Rob Campbell - November 2009
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
% Parse input arguments
-
narginchk(3,inf)
-
params = inputParser;
-
params.CaseSensitive = false;
-
params.addParameter('lineProps', '-k', @(x) ischar(x) | iscell(x));
-
params.addParameter('transparent', true, @(x) islogical(x) || x==0 || x==1);
-
params.addParameter('patchSaturation', 0.2, @(x) isnumeric(x) && x>=0 && x<=1);
-
params.parse(varargin{:});
-
%Extract values from the inputParser
-
lineProps = params.Results.lineProps;
-
transparent = params.Results.transparent;
-
patchSaturation = params.Results.patchSaturation;
-
if ~iscell(lineProps), lineProps={lineProps}; end
-
%Process y using function handles if needed to make the error bar dynamically
-
if iscell(errBar)
-
fun1=errBar{1};
-
fun2=errBar{2};
-
errBar=fun2(y);
-
y=fun1(y);
-
else
-
y=y(:).';
-
end
-
if isempty(x)
-
x=1:length(y);
-
else
-
x=x(:).';
-
end
-
%Make upper and lower error bars if only one was specified
-
if length(errBar)==length(errBar(:))
-
errBar=repmat(errBar(:)',2,1);
-
else
-
s=size(errBar);
-
f=find(s==2);
-
if isempty(f), error('errBar has the wrong size'), end
-
if f==2, errBar=errBar'; end
-
end
-
if length(x) ~= length(errBar)
-
error('length(x) must equal length(errBar)')
-
end
-
%Log the hold status so we don't change
-
initialHoldStatus=ishold;
-
if ~initialHoldStatus, hold on, end
-
H = makePlot(x,y,errBar,lineProps,transparent,patchSaturation);
-
if ~initialHoldStatus, hold off, end
-
if nargout==1
-
varargout{1}=H;
-
end
-
function H = makePlot(x,y,errBar,lineProps,transparent,patchSaturation)
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
% Plot to get the parameters of the line
-
H.mainLine=plot(x,y,lineProps{:});
-
% Work out the color of the shaded region and associated lines.
-
% Here we have the option of choosing alpha or a de-saturated
-
% solid colour for the patch surface.
-
mainLineColor=get(H.mainLine,'color');
-
edgeColor=mainLineColor+(1-mainLineColor)*0.55;
-
if transparent
-
faceAlpha=patchSaturation;
-
patchColor=mainLineColor;
-
else
-
faceAlpha=1;
-
patchColor=mainLineColor+(1-mainLineColor)*(1-patchSaturation);
-
end
-
%Calculate the error bars
-
uE=y+errBar(1,:);
-
lE=y-errBar(2,:);
-
%Add the patch error bar
-
%Make the patch
-
yP=[lE,fliplr(uE)];
-
xP=[x,fliplr(x)];
-
%remove nans otherwise patch won't work
-
xP(isnan(yP))=[];
-
yP(isnan(yP))=[];
-
if(isdatetime(x))
-
H.patch=patch(datenum(xP),yP,1);
-
else
-
H.patch=patch(xP,yP,1);
-
end
-
set(H.patch,'facecolor',patchColor, ...
-
'edgecolor','none', ...
-
'facealpha',faceAlpha)
-
%Make pretty edges around the patch.
-
H.edge(1)=plot(x,lE,'-','color',edgeColor);
-
H.edge(2)=plot(x,uE,'-','color',edgeColor);
-
uistack(H.mainLine,'top') % Bring the main line to the top
2、选择shadedErrorBar.m文件黏贴到matalb的toolbox文件下面,我设置的路径是D:\Program Files\MATLAB\R2016b\toolbox\shadedErrorBaryy。然后选择matlab主页的设置路径
3、将预先设置的文件添加进去
4、检查是否设置成功
在matlab运行窗口输入help shadedErrorBar,如果出现以下情况说明 shadedErrorBar函数设置成功
5、最后运行
-
% Prepare data
-
y=randn(30,80)*5;
-
x=(1:size(y,2))-40;
-
yP = sin( linspace(-2*pi,2*pi,length(x)) )*20;
-
y = bsxfun(@plus,y,yP)+60;
-
% Make the plot
-
clf
-
shadedErrorBar(x,y,{@mean,@std});
-
% Overlay the raw data
-
hold on
-
plot(x,y,'.','color',[0.5,0.5,0.95])
-
grid on
-
% Prepare data for first line
-
y=ones(30,1)*x;
-
y=y+0.06*y.^2+randn(size(y))*10;
-
clf
-
shadedErrorBar(x,y,{@mean,@std},'lineprops','-b','patchSaturation',0.33)
-
% Overlay second line
-
hold on
-
shadedErrorBar(x,2*y+20,{@mean,@std},'lineprops',{'-go','MarkerFaceColor','g'});
-
%Overlay third line
-
y=randn(30,80)*5;
-
x=(1:size(y,2))-40;
-
yP = sin( linspace(-2*pi,2*pi,length(x)) )*20;
-
y = bsxfun(@plus,y,yP)+60;
-
% Make this line non-transparent
-
shadedErrorBar(x, y, {@mean,@std}, 'lineprops', '-r','transparent',false,'patchSaturation',0.075)
-
grid on
-
% Prepare data
-
y=randn(30,80)*5;
-
x=(1:size(y,2));
-
yP = sin( linspace(-2*pi,2*pi,length(x)) )*20;
-
y = bsxfun(@plus,y,yP);
-
% Plot
-
clf
-
s = shadedErrorBar(x, y, {@mean,@std}, 'lineprops', '-r');
-
% Set face and edge properties
-
set(s.edge,'LineWidth',2,'LineStyle',':')
-
s.mainLine.LineWidth = 5;
-
s.patch.FaceColor = [0.5,0.25,0.25];
-
% Overlay data points post-hoc
-
hold on
-
plot(s.mainLine.XData, s.mainLine.YData,'or','MarkerFaceColor','w')
-
grid on
-
set(gca,'XTickLabel',[],'YTickLabel',[])
-
% Post-hoc modifications of line properties
-
y=randn(256,80)*5;
-
x=(1:size(y,2));
-
yP = cos( linspace(-2*pi,2*pi,length(x)) )*10;
-
y = bsxfun(@plus,y,yP);
-
shadedErrorBar(x, y, {@mean,@std}, 'lineprops', '-r')
-
hold on
-
y=mean(y)+16;
-
errbar = [2*ones(1,length(x)) ; 4*ones(1,length(x))];
-
shadedErrorBar(x, y, errbar, 'lineprops', '-g')