Control errorbar width in Matlab R2014b
    14 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
Pre R2014b Matlab versions allowed the separate control of the length of the top and bottom error bar lines separately through the 'xdata' property. This is not possible any more in Matlab R2014b, where the 'xdata' property contains only the x coordinates of the data points but not the error bar lines. Is there a way to control the error bar line length in Matlab R2014b?
8 comentarios
  Trevor Agus
 el 2 de Ag. de 2015
				I've made a temporary solution to the problem by avoiding using the original "errorbar" function, and writing my own "terrorbar.m" that just draws the lines (using plot) as required.
It has the kinds of features needed by that those of us who might care about the width of our confidence intervals, i.e., you can specific the width in absolute terms (e.g. 'centi', 'inches') or normalised to the size of the figure ('norm') or to the units ('units').
It copes with changes in figure size, but not necessarily other changes (units, axis size), unless you re-call the function after (no parameters required). This is not ideal, but it's about as good as you'll get without hacking into the darkest depths of Matlab!
You can download it through Matlab Central: http://uk.mathworks.com/matlabcentral/fileexchange/52367-terrorbar-m--error-bars-with-controlled-widths-post-r2014b
  Brandon  Madsen
      
 el 25 de En. de 2018
				
      Editada: Brandon  Madsen
      
 el 25 de En. de 2018
  
			See 1/25/2018 answer here ( https://www.mathworks.com/matlabcentral/answers/100333-how-do-i-change-the-width-of-the-horizontal-lines-at-top-and-bottom-of-error-bars-in-my-errorbar-plo ) for a version that I think should work for 2014b (it works for 2015b for sure). It involves hacking into the darkest depths of Matlab, as suspected ;)
Respuestas (3)
  Sean de Wolski
      
      
 el 7 de En. de 2015
        Pre-R2014b, this was possible because the errorbar series had children which were lines you could adjust. Since that's no longer the case, this approach no longer works.
I'd at least recommend contacting tech-support with your use-case and reasoning so that they can add an enhancement request for it.
5 comentarios
  Scott Webster
      
 el 7 de Mzo. de 2017
				I replied to my Mathworks support case on this (2 years old) 4 days ago. No reply yet. I'll update here if I get an answer.
  Scott Webster
      
 el 14 de Mzo. de 2017
				I received a response from MathWorks. A CapSize property has been added to the errorbars as of R2016b. Here is my previous example updated to use this functionality (with excessive crossbar width):
x=[5 25];
y=[10 10];
err=[5 5];
hold on
h=errorbar(x,y,err,'ro');
h.CapSize = 12;
x=[13 17];
h=errorbar(x,y,err,'bo');
h.CapSize = 12;
print('-dpng','errorbars3.png');
The resultant plot is as follows.

However, I also noticed that the errorbar width was actually ok for this example in R2016b before I even adjusted the capsize, so it seems that some other general improvements were made as well.
Finally, MathWorks also provided the following code example for manually drawing the crossbars in case you don't have R2016b.
% Create errorbar
X = 0:pi/10:pi;
Y = sin(X) + 1;
E = std(Y) * ones(size(X));
ha = errorbar(X, Y, E);
% Width of the top and bottom lines of errorbar
xlength = 0.1;
% Make horizontal lines with 'line'
for k = 1:length(X)
 x = [X(k) - xlength, X(k) + xlength];
 y_h = [Y(k) + E(k), Y(k) + E(k)];
 line(x, y_h);
 y_b = [Y(k) - E(k), Y(k) - E(k)];
 line(x, y_b);
end
  Sören Fechner
 el 30 de En. de 2015
        I have the same Problem. Have you found a solution yet ?
1 comentario
  Brandon  Madsen
      
 el 25 de En. de 2018
				
  Ramaprasad Kulkarni
 el 20 de Dic. de 2016
        You guys might have found a solution, but just putting this out there:
An alternate and easier option to control the width of the top/bottom crossbars is to plot each pair of [x(i), y(i)] points and corresponding errorbar(x(i),y(i),err(i)). This ensures the width of the top/bottom crossbars is 0.02*x(i).
The downside of this approach is you have to use an unnecessary for loop to go over all the values in the X/Y vectors.
1 comentario
  Scott Webster
      
 el 3 de Mzo. de 2017
				Wouldn't that result in inconsistent crossbar widths though, if they were scaled with the x position value?
Ver también
Categorías
				Más información sobre Errorbars en Help Center y File Exchange.
			
	Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!












