Updated 19 Oct 2020
Whilst box plots have their place, it's sometimes nicer to see all the data, rather than hiding them with summary statistics such as the inter-quartile range. This function (with a tongue in cheek name) addresses this problem. The use of the mean instead of the median and the SEM and SD instead of quartiles and whiskers are deliberate. Jittered raw data are plotted for each group. Also shown are the mean, and 95% confidence intervals for the mean. This plotting style is designed to be used alongside parametric tests such as ANOVA and the t-test. Comparing the jittered data to the error bars provides a visual indication of whether the normality assumptions of the statistical tests are being violated. Furthermore, it allows one to eyeball the data to look for significant differences between means (non-overlapping confidence intervals indicate a significant difference at the chosen p-value, which here is 5%). Also see: http://jcb.rupress.org/cgi/content/abstract/177/1/7 Finally, 1 SD is also shown. Note that if data are not normally distributed then these statistics will be less meaningful.
The function has several examples and there are various visualization possibilities in addition to those shown in the above screenshot. For instance, the coloured areas can be replaced by lines.
Although it's worked well for situations I've needed it, I will be happy to modify the function if users come up against problems.
New features from March 2017:
Accepts LinearModel objects as a y variable; Accepts Table objects as a y variable; Examples are now in standalone files; Legacy call format removed; x variable does not need to be defined as empty when it isn't being used
See GitHub page for more details.
Rob Campbell (2023). notBoxPlot (https://github.com/raacampbell/notBoxPlot), GitHub. Retrieved .
MATLAB Release Compatibility
Platform CompatibilityWindows macOS Linux
- MATLAB > Graphics > 2-D and 3-D Plots > Data Distribution Plots > Bar Plots >
- Sciences > Neuroscience > Frequently-used Algorithms >
- AI, Data Science, and Statistics > Statistics and Machine Learning Toolbox > Descriptive Statistics and Visualization > Statistical Visualization > Box Plots >
Inspired: jqu224/masterProject, plotfdesign(T,G,varargin), Alternative box plot, UnivarScatter
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!
Discover Live Editor
Create scripts with code, output, and formatted text in a single executable document.
Versions that use the GitHub default branch cannot be downloaded
BUGFIX to SEM and t-interval calc. Jittered points have a neater form, more like those seen in violin plots.
Some operations (such as t-interval calculation) depend on the Stats Toolbox.
provide a nicer example image
Verified to work with R2015a
Fixed bug that didn't pass input arguments correctly when two vectors are supplied.
Update summary to explain that the function works without the stats toolbox if the nan-toolbox is installed.
Better handles x-ticks and x axis limits. Add missing semicolon.
Fix bug that was causing handles not return for one of the plot formats.
Both x and y can now be vectors, in which case the function behaves like Mathworks' boxplot. An example of this behaviour is provided.
An example of the "sdline" plot style is now provided.
If "y" is a vector then the function ensures it is a column vector in order to yield one box-plot.
The 4th argument can now also have the value "sdline". This creates plots where the SD is a line instead of a patch.
Handle to mean line when in patch mode (the default mode) is now returned.
Add link to JCB article on error bars.
Add tInterval_Calc and update the comments in SEM_calc
re-upload because support file (SEM_calc.m) seemed to be missing