这是我的问题:
我有一个带errorbar
的MATLAB图(所有工作正常),但是条的宽度太宽。有一种方法可以设置条的宽度吗?
如果你仔细观察这张图片,可以看到几行红色和蓝色,其大小与我想要的一样(例如,w = 0.25)。
任何帮助都表示赞赏。
答案 0 :(得分:2)
您需要访问他们的XData
属性并进行修改。有关Mathworks的示例,请查看here。
具体如下:
生成errorbar
图:
hf = figure;
X = 0:pi/10:pi;
Y = sin(X);
E = std(Y)*ones(size(X));
hErrBar = errorbar(X,Y,E);
获取XData
属性以及表示误差线水平线的左/右索引。
hb = get(hErrBar,'children');
Xdata = get(hb(2),'Xdata');
temp = 4:3:length(Xdata);
temp(3:3:end) = [];
xleft = temp; xright = temp+1;
根据需要修改数据并更新绘图。例如,将线长减少0.2个单位
Xdata(xleft) = Xdata(xleft) + .1;
Xdata(xright) = Xdata(xright) - .1;
%// Update
set(hb(2),'Xdata',Xdata)
例如,
在:
之后:
答案 1 :(得分:0)
我找到了一个修改错误栏宽度的代码。
它的使用非常简单。绘制错误栏后
h = errorbar(X, Y, L, U, ...);
您必须调用该函数:
errorbar_tick(h,w);
如评论中所述。
代码是:
function errorbar_tick(h,w,xtype)
%ERRORBAR_TICK Adjust the width of errorbars
% ERRORBAR_TICK(H) adjust the width of error bars with handle H.
% Error bars width is given as a ratio of X axis length (1/80).
% ERRORBAR_TICK(H,W) adjust the width of error bars with handle H.
% The input W is given as a ratio of X axis length (1/W). The result
% is independent of the x-axis units. A ratio between 20 and 80 is usually fine.
% ERRORBAR_TICK(H,W,'UNITS') adjust the width of error bars with handle H.
% The input W is given in the units of the current x-axis.
%
% See also ERRORBAR
%
% Author: Arnaud Laurent
% Creation : Jan 29th 2009
% MATLAB version: R2007a
%
% Notes: This function was created from a post on the french forum :
% http://www.developpez.net/forums/f148/environnements-developpement/matlab/
% Author : Jerome Briot (Dut)
% http://www.mathworks.com/matlabcentral/newsreader/author/94805
% http://www.developpez.net/forums/u125006/dut/
% It was further modified by Arnaud Laurent and Jerome Briot.
% Check numbers of arguments
error(nargchk(1,3,nargin))
% Check for the use of V6 flag ( even if it is depreciated ;) )
flagtype = get(h,'type');
% Check number of arguments and provide missing values
if nargin==1
w = 80;
end
if nargin<3
xtype = 'ratio';
end
% Calculate width of error bars
if ~strcmpi(xtype,'units')
dx = diff(get(gca,'XLim')); % Retrieve x limits from current axis
w = dx/w; % Errorbar width
end
% Plot error bars
if strcmpi(flagtype,'hggroup') % ERRORBAR(...)
hh=get(h,'children'); % Retrieve info from errorbar plot
x = get(hh(2),'xdata'); % Get xdata from errorbar plot
x(4:9:end) = x(1:9:end)-w/2; % Change xdata with respect to ratio
x(7:9:end) = x(1:9:end)-w/2;
x(5:9:end) = x(1:9:end)+w/2;
x(8:9:end) = x(1:9:end)+w/2;
set(hh(2),'xdata',x(:)) % Change error bars on the figure
else % ERRORBAR('V6',...)
x = get(h(1),'xdata'); % Get xdata from errorbar plot
x(4:9:end) = x(1:9:end)-w/2; % Change xdata with respect to the chosen ratio
x(7:9:end) = x(1:9:end)-w/2;
x(5:9:end) = x(1:9:end)+w/2;
x(8:9:end) = x(1:9:end)+w/2;
set(h(1),'xdata',x(:)) % Change error bars on the figure
end