2015-03-12 3 views
3

Это моя проблема:Регулировка ширины бар ошибки в Matlab

My problem :-)

У меня есть участок MATLAB с errorbar (все работает неправильно), но ширина брусков слишком широк. Есть ли способ установить ширину полосы?

Если вы посмотрите на это изображение очень осторожно, вы можете увидеть несколько строк красных и синих с размером, который я хотел бы (например, w = 0,25).

Любая помощь ценится.

+0

Оба ответа ниже не работает в Matlab 2014b до 2016a – EBH

ответ

2

Вам необходимо получить доступ к их недвижимости XData и изменить их. Проверьте пример here на Mathworks.

Конкретно вот как это сделать:

Генерированием 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) 

Так, например,

До:

enter image description here

И после того, как:

enter image description here

0

У меня есть нашел код, который модифицирует ширина полосы ошибок.

Его использование очень простое. После того, как построены в errorbar:

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 
Смежные вопросы