Efficient 2D histogram, no toolboxes needed
Updated 16 Sep 2015
Displays a 2d histogram for your data, it will set the bins appropriately
NDHIST(x,y); where x and y are equal length vectors. It will choose
reasonable axis bounds and bins to present your data. The
default parameters may leave some data off the chart.
NDHIST(XY); where XY = [x y] and x,y are vectors
NDHIST(z); where z is a vector of complex numbers, (x+1i*y) or amplitude*exp(1i*theta)
NDHIST(y); where y is a vector of real numbers will plot a 2d histogram
of the points, as if it were a line-chart. It is equivalent
to calling ndhist(1:length(y),y);
N = NDHIST(x,y); returns a matrix N containing the counts for each bin
determined by the histogram.
[edgesX2,edgesY2,N] = NDHIST(x,y); which returns a matrix N containing
the counts for each bin determined by the histogram. You can
plot it with sanePColor(edgesX2,edgesY2,N); (from Matlabcentral)
NDHIST(...,'param','value','param','value', ... ); Run ndhist with specific
List of special parameters:
'filter' : This will apply a gaussian filter to the final histogram data.
The default filter width is 5 bins wide. If you pass a number
then that will be used. Even numbered filter parameters will be
changed to odd numbers to keep the filter perfectly symetrical.
'log' : Change the colormap to be on a log scale to represent data
over a large dynamic range.
'bins' : Change the size of the bins. For example '2' will create a
plot with twice the default number of bins; 0.5 will have half
the default number of bins. The default uses Scott's normal
reference rule. Unclear if it is ideal for 2d histograms...
If you are looking for a histogram with specific bins, use the
subfunction hist3. Feel free to implement it as an additional
parameter 'edgdes','edgesx' or 'edgesy'
'binsx' : Change the size of only the x bins. 'fx'
'binsy' : Change the size of only the y bins. 'fy'
axis : This is to set the range of the plot, [xmin xmax ymin ymax]
The default range is set to 3*std(x) and 3*std(y) where the
parameter stdTimes=3 is hard-coded in this version and
potentially added as a parameter in a later version.
max : This is to set the range of the plot to be such that every
point will be contained within the plot.
intbins : Set the bins to be intiger widths. For both x and y
intbinsx : Set the x bins to be intiger widths. 'intx'
intbinsy : Set the y bins to be intiger widths. 'inty'
normalizex: Normalize the plot so that the sum of all the y values in each
x bin sum to one.
normalizey: Normalize the plot so that the sum of all the x values in each
y bin sum to one.
normalizeR: Normalize the plot so that the you can clearly see how the
distribution vary's over angle. It weights points in the outer
radius by the diameter at that radius.
points: Plot the points on top of the colored histogram.
3D: Use a 3D column graph instead of a colored heatmap
radial : Set the axis to be equal and add a polar grid 'r'
NOT IMPLEMENTED YET
'samebins': NOT IMPLEMENTED YET. Would set the width of the x and y bins
to be equal to each other and the axis equal too.
filter: This will filter the data, you may choose to follow it with a
number. This number will represent the radius of the circular
gaussian filter. Other ways to call it: 'filt','filtering','f'
To test the function you may use this example:
If you have amplitude and angle measures then pass this:
z = amp*exp(1i*ang);
The name of this function comes because really its a 2d hist, but since I
already have an 'nhist' I thought I might name it this.
SEE ALSO: HIST, HIST3
Jonathan C. Lansey (2023). Efficient 2D histogram, no toolboxes needed (https://www.mathworks.com/matlabcentral/fileexchange/45325-efficient-2d-histogram-no-toolboxes-needed), MATLAB Central File Exchange. Retrieved .
MATLAB Release Compatibility
Platform CompatibilityWindows macOS Linux
- MATLAB > Graphics > 2-D and 3-D Plots > Data Distribution Plots > Bar Plots >
- MATLAB > Graphics > 2-D and 3-D Plots > Data Distribution Plots > Histograms >
Inspired by: sanePColor(varargin), Plot and compare histograms; pretty by default, Beautiful and distinguishable line colors + colormap
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.
added ability to call it like: plot(x,y,'.')
Added code from Josh G to allow for plotting 3D column style histograms
changed title to seem more professional
removed old reference to non-used function
Added more tags, updated summary