hide one tail of errorbar

30 views (last 30 days)
Cathie Kessler on 11 Dec 2012
I am generating figures for someone that wants to show only one half of an errorbar on a barplot. In one case, this was easy, as the barplot covered the tail, but in a second case, the offending tail goes beyond the axis so hangs out "below" the barplot.
This is just a one-off, so I don't need to do it programmatically, but I can, if necessary. Any advice?
I already tried inserting a white, rimless rectangle, but I couldn't figure out how to put it "behind" some other plot objects. That would also be an acceptable workaround.
Thanks!

Kye Taylor on 11 Dec 2012
Have you tried something like
x = linspace(0,1);
y = x.^2;
err = randn(size(x));
errorbar(x,y,zeros(size(x)),err)

Luke Wilhelm on 11 Dec 2012
Edited: Luke Wilhelm on 11 Dec 2012
Here is an example code that I believe produces what you are looking for (in this case, I have 20 bars in the bar graph):
x=1:20;
y=rand(1,20)
L=zeros(1,20)
U=rand(1,20)
bar(y)
hold on
h=errorbar(x,y,L,U,'k');
set(h,'linestyle','none');
Where U are the upper bounds on your error bars.
I hope this helps,
Luke

Cathie Kessler on 11 Dec 2012
Yes, of course, you're both right. I just didn't know that I could specify L and U values.
Thanks!

Jonathan Epperl on 11 Dec 2012
Here is a hack that should do what you want it to, odd request though to show only the upper half of the errors... Anyway:
x=1:20;
y=rand(1,20)
L=-rand(1,20)
U=rand(1,20)
bar(y)
hold on
h=errorbar(x,y,L,U,'k');
c = get(h,'Children')
yd = get(c(2),'Ydata');
yd([7:9:end 8:9:end])=nan;
yd(2:9:end)=y;
set(c(2),'YData',yd)