View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
barweb (BARgraph With Error Bars)

4.7 | 72 ratings Rate this file 82 Downloads (last 30 days) File Size: 2.78 KB File ID: #10803 Version: 1.2
image thumbnail

barweb (BARgraph With Error Bars)


Bolu Ajiboye (view profile)


20 Apr 2006 (Updated )

Plots a fully customizable grouped bar graph with error bars

| Watch this File

File Information

barweb.m calls the BAR and ERRORBAR MATLAB functions to produce bar graphs with error bars. The resultant graph is fully customizable, from group naming to legend inclusion to colormap setting. It assumes an m-by-n y-input matrix and plots m groups of n bars. The errorbar matrix must be setup the same way as the barvalues matrix (i.e. same dimensionality, matched values must have same indexes)

barweb(barvalues, errors, width, groupnames, bw_title, bw_xlabel, bw_ylabel, bw_colormap, gridstatus, bw_legend)


This file inspired Bar Two Yaxis, Barwebpairs (Pair Bars Within Groups And Between Groups), Create Healthy Looking Error Bars, Grouped Bar Plots With Error Bars, and Superbar.

MATLAB release MATLAB 7.1.0 (R14SP3)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (96)
11 Jan 2017 handec

handec (view profile)

10 Dec 2016 Amin Mahmoodi

Excellent! Very useful app.

21 Sep 2016 Evyatar Cohen

Hi all,
Dose anyone know why the one side error option doesn't work? It show only a line Parallel to the column. Also it is not in the right value (that the std spouse to be).

Comment only
19 Sep 2016 jfcabana

Hi, that function seems useful! I get an error though trying to use it. My data and error matrices are both 9 x 2. I get this error :

Index exceeds matrix dimensions.

Error in barweb (line 152)
x = mean(x([1 3],:));

Comment only
19 Sep 2016 Evyatar Cohen

Hi all

How can i plot multi groups on one graph, like in the example image?

Comment only
19 Sep 2016 Evyatar Cohen

Hi all

First this function is very useful.

How can i plot multi groups on one graph, like in the example image?

24 Jun 2016 imu931

imu931 (view profile)

Very useful!

24 May 2016 bugguts99

Hi there,

I have stipulated to plot only one error bar (+ve) and it does this; however, when I save it as .fig, .eps or .png the image plots with 2 error bars (+ve & -ve). I have deleted and re-drawn the plots a million times, to different formats and keep having the same problem. Am I missing something?

Comment only
20 May 2016 Kiran Karra

06 May 2016 sara shaheen

This is a very nice function, and I want something exactly like figure 1, though I seem unavailable to get my legends on each bar to work. I'm new in Matlab and if someone could help me how the inputs are given to the function barweb to achieve figure 1 It would be a great help. Thanks in advance.

Comment only
26 Aug 2015 David

David (view profile)

Works great with the change Flo provided. Thanks.

02 Jun 2015 Flo

Flo (view profile)

To get the code back working with R2015a (, the plot errors loop has to be changed to:

for i = 1:numbars
x = bsxfun(@plus, handles.bars(i).XData, [handles.bars(i).XOffset]');
handles.errors(i) = errorbar(x, barvalues(:,i), errors(:,i), 'k', 'linestyle', 'none', 'linewidth', 1);
ymax = max([ymax; barvalues(:,i)+errors(:,i)]);

Comment only
02 Jun 2015 Flo

Flo (view profile)

14 May 2015 cmo

cmo (view profile)

03 Jan 2015 Oleg Komarov

Oleg Komarov (view profile)

Since R2012b you can use errorbar:

x = pi/10:2*pi;
y = sin(x);
e = std(y)*ones(size(x));

hold on

Comment only
08 Oct 2014 Rainer

Rainer (view profile)

Oh no, doesnt work with 2014b anymore.

Comment only
06 Dec 2013 Greg

Greg (view profile)

@Jaroslav Hlinka. Fixed this bug. Changed the plot errors loop to this. Set 'error_sides' to 3.

% Plot erros
for i = 1:numbars
x = get(get(handles.bars(i),'children'), 'xdata');
x = mean(x([1 3],:));

if error_sides == 3
pValues = barvalues;
nValues = barvalues;
handles.posErrors(i) = errorbar(x, pValues(:,i), zeros(size(errors(:,i))), errors(:,i), 'k', 'linestyle', 'none', 'linewidth', 2);
handles.negErrors(i) = errorbar(x, nValues(:,i), errors(:,i), zeros(size(errors(:,i))), 'k', 'linestyle', 'none', 'linewidth', 2);
handles.errors(i) = errorbar(x, barvalues(:,i), errors(:,i), 'k', 'linestyle', 'none', 'linewidth', 2);
ymax = max([ymax; barvalues(:,i)+errors(:,i)]);

Comment only
29 Nov 2013 Aaron Pancost

28 Nov 2013 Li

Li (view profile)

It is working,thank you very much!

08 Nov 2013 Rakesh Chalasani

25 Jul 2013 Shuvra

Shuvra (view profile)


18 Jul 2013 Michael

Wonderful function, very useful. Just a quick question, my error value of choice at the moment is SEM; when I input my SEM matrix (1 standard error of the mean) as my "errors" values, does this function plot 1 SEM above and below the mean (showing 2 SEM in total), or does it split 1 SEM in half and shows the upper and lower half, above and below the mean respectively (showing 1 SEM in total) ?

Thanks a bunch for the feedback!

05 Jul 2013 Shatrughan

Hey Plamen..what is your data..I may help you as have been using this great script since long for plotting..let me know about your data..

Comment only
05 Jul 2013 Plamen

Plamen (view profile)

How do you group up different data on one plot? In the example image there are 3 groups with 'type1 type2 type3 type4' but I cannot figure out how.

Comment only
10 Apr 2013 Nolan Conaway


31 Jan 2013 Diane

Diane (view profile)

This is a really great program. One additional feature that would be great is making it so you can make a break in the y-axis (e.g. if you have a break from 100 to 1000) when plotting data of different magnitudes.

Comment only
13 Dec 2012 john

john (view profile)

Works well.Great

Comment only
10 Dec 2012 George McFadden

I have the same problem as the previous two comments here. The groupnames input only displays 1 string on the x axis, and I have a 6x1 cell variable = groupnames. Appears to be a common problem with other users. Please Advise how to fix!


04 Jan 2012 Parul Srivastava

how to plot with secondary axis means values of two bars on two different y axis

Comment only
03 Jan 2012 David

David (view profile)

I seem to have run into a bug. I want to have a single bar for several groups and I set the groupnames variable to the names I want. But I end up with one group and multiple bars. I've tried inputing an mx1 vector and 1xm vector to see if that's the problem but both times I get the same results. Commenting out lines 120 and 121 fixed it. Any ideas?

Comment only
24 Nov 2011 Hong

Hong (view profile)

good job

Comment only
26 Oct 2011 Mariana

02 Sep 2011 Yi YIN

Yi YIN (view profile)

16 Aug 2011 amit Singh


Comment only
28 Jul 2011 dani din

18 Jul 2011 Arturo Moncada-Torres

Nice file. I recommend you to look at this post ( regarding variable inputs for functions.

Keep up the good work ;-)

16 Jul 2011 musi

musi (view profile)

(The above statement is to put samples values associated with each bar in the x-axis)

Comment only
16 Jul 2011 musi

musi (view profile)

Pretty great:

it is working

% groupnames
{'1000', '2000', '5000', '10000', '15000', '20000', '25730'},

Comment only
14 Jul 2011 Pearl

Pearl (view profile)

Thank you!

11 Jul 2011 Arturo Moncada-Torres

01 Jul 2011 Rachel

Rachel (view profile)

what are the options to set the gridstatus input to?

Comment only
30 Mar 2011 Casey Ta

Thanks, this was very helpful!

Comment only
30 Mar 2011 Casey Ta

16 Jan 2011 Karen

Karen (view profile)

It would be nice if we could set different upper and lower error values... Otherwise quite cool

08 Dec 2010 Ali Ali

Thanks a lot

11 Nov 2010 Juan Carlos


03 Nov 2010 Erin

Erin (view profile)

to plot bars horizontal
view(90, -90)

or view(-90, 90)

15 Oct 2010 Patrick A.

14 Oct 2010 C G

C G (view profile)

Great. Thanks!

Comment only
30 Sep 2010 Jeff Chen

Works GREAT!

15 May 2010 Ross

Ross (view profile)

This is really nice. If using values in only one group (monthly rain data, for example), is there any way to add labels to the x-axis?

14 May 2010 James

James (view profile)

Thanks Bolu! This is what I was looking for.

05 Apr 2010 Pearl

Pearl (view profile)

01 Apr 2010 Jesse Brown

Handy function. One problem: when I save a figure with one-sided bars to .png or .tif, two-sides bars show up.

29 Mar 2010 Debanjan Goswami

Really nice and easy. But I have got a problem. I can't plot the 'X-tick' like type1, type2... written in the example figure. I have the text for each bar in a separate cell array. How to incorporate?


22 Feb 2010 Anke

Anke (view profile)

really helpfull!

18 Feb 2010 Luis Felipe Giraldo


15 Jan 2010 Dung Chu

Great. I just need view(90, -90) after all to have horizontally-aligned bar charts.

Comment only
26 Nov 2009 Arthur

Arthur (view profile)

07 Nov 2009 Roman Balabin

01 Oct 2009 Jaroslav Hlinka

Thanks for the function! Useful, although I think I may have found an annoying bug: using 'error_sides = 1', when I save tiff file, it has the errorbar all the way down to x-axis (it is still ok when the initial figure is created). Using MATLAB R2007a on windowsXP. Any idea why/Any quick fix available?
PS. btw, the usage in the .m file might not be up to date - e.g. mentioning "barwebtype" parameter which is not amongst the function parameters.

22 Jul 2009 Greg Imamura

Great program- I modified mine to allow for lower and upper errors

10 Jul 2009 Matthew

01 Jun 2009 Félix Chénier

Clean and simple, it does a very good job. Thank you

29 Apr 2009 Wenjia

Wenjia (view profile)

Excellent! That is just what I need.

09 Dec 2008 Mastaneh

16 Oct 2008 Kshitiz Gupta

Thanks. It is very useful.

14 Oct 2008 René Quilodran

Thanks Bolu !!!!! you did a great job!!!

18 Sep 2008 Nikolay Stoykov

Great job, Bolu! Thanks.

10 Sep 2008 Lan Huong Vu Thi

Thanks. It is useful for me !

08 Sep 2008 Brajendra Singh


08 Aug 2008 Jorge T

Great! saved me a lot of time!

05 Aug 2008 A VanderWyst

02 Jul 2008 Ben Engel

This was a great help - thanks!

20 Jun 2008 alyssa smith

you're my hero. this just saved me a mountain of trouble!!

04 Jun 2008 Y Guo

Thanks! Good job! Matlab should consider incorporating this!

01 May 2008 Amanda Whitmire

Great - exactly what I needed. Thanks for sharing it.

15 Apr 2008 H Hung

great stuff.. any chance of updating it so that the errors can have an upper and lower bound like the matlab errorbar function?

10 Apr 2008 Kim Bostroem

Why hasn't the great Matlab thought of this himself? It's SO useful!

03 Apr 2008 Juan Hincapie

Exactly what I needed!

03 Apr 2008 Andy C

Just what I always wanted.

14 Feb 2008 Dimka P

Very helpful! Thanks!

12 Feb 2008 John Elve

The script itself is good but it lacks the possibility of a variable number of input arguments!

07 Feb 2008 J X

This is very helpful, which helped me draw the graphs in a few secs.

05 Feb 2008 Diana Bedolla

For the plotting it works really good, but when I introduce the groupnames it repeats the same
first groupname in each x-tick. Any idea what could be the problem?? Thanks for the file!!

20 Dec 2007 Steve Fleming

One of the very few oversights in the graphics toolbox is not having an easy way of plotting error bars! This is great and saved me a lot of time.

17 Dec 2007 germana ba

thank you so much!

08 Jul 2007 Richard Lemon

This works very well. What a big help. Thanks!

01 Jun 2007 Will Hunting

Thanks a lot !

31 May 2007 James Blake

Works well with R2006a. Nice and easy to change the colours of the bars and such.

11 Apr 2007 Richard Cui

Neat job!

01 Mar 2007 Michael Frank

Nice! produces very pretty graphs, generally very easy to use.

31 Aug 2006 Scott G

Small problem with group labelling in R14.

Fix on line 124:
Add additional arguments to set(...)

set(gca, ..., 'XTick', 1:numgroups);

24 Apr 2006 Angela Chapman

Unfortunately for me, not compatible with Matlab 6.0.

Comment only
23 Apr 2006 Jiro Doke

Pretty good, but it doesn't leave the user much control to make modifications. You should at least return the handles of the bar and errorbar objects, so that the user can modify their properties. Along the same line, you should also return the handle of the legend axes. I prefer leaving the legend (as well as title and labels) out for the user to do on their own, since it allows them to customize properties like position, fontsize, fontweight, etc.

23 Apr 2006 Shai Shen-Orr

24 Apr 2006

Revised based upon M-Lint Code Report.

No functional revisions...code has just been spaced for better readability.

24 Apr 2006

Revised based upon M-Lint Code Report.

No functional revisions...code has just been spaced for better readability.

24 Apr 2006

Updated based upon the M-Lint code report. No functional changes were made. The code was just spaced out for easier reading and comprehension.

28 Sep 2009 1.1

1) Now able to plot 1 vs 2-sided barwebs
2) Now able to show legend along x-axis or on standard plot
3) Made code more robust by using bar children features rather than calculating x positions manually
4) other small fixes

01 Oct 2009 1.2

Changed the usage information

Contact us