File Exchange

image thumbnail


version (2.24 KB) by Alex Sanchez
Scatter plot with color indicating data density.


Updated 05 Dec 2005

No License

% Scatter plot with color indicating data density
% out = scatplot(x,y,method,radius,N,n,po,ms)
% out = scatplot(x,y,dd)
% Draws a scatter plot with a colorscale
% representing the data density computed
% using three methods
% x,y - are the data points
% method - is the method used to calculate data densities:
% 'circles' - uses circles with a determined area
% centered at each data point
% 'squares' - uses squares with a determined area
% centered at each data point
% 'voronoi' - uses voronoi cells to determin data densities
% default method is 'voronoi'
% radius - is the radius used for the circles or squares
% used to calculate the data densities if
% (Note: only used in methods 'circles' and 'squares'
% default radius is sqrt((range(x)/30)^2 + (range(y)/30)^2)
% N - is the size of the square mesh (N x N) used to
% filter and calculate contours
% default is 100
% n - is the number of coeficients used in the 2-D
% running mean filter
% default is 5
% (Note: if n is length(2), n(2) is tjhe number of
% of times the filter is applied)
% po - plot options:
% 0 - No plot
% 1 - plots only colored data points (filtered)
% 2 - plots colored data points and contours (filtered)
% 3 - plots only colored data points (unfiltered)
% 4 - plots colored data points and contours (unfiltered)
% default is 1
% ms - uses this marker size for filled circles
% default is 4
% out - structure array that contains the following fields:
% dd - unfiltered data densities at (x,y)
% ddf - filtered data densities at (x,y)
% radius - area used in 'circles' and 'squares'
% methods to calculate densities
% xi - x coordenates for zi matrix
% yi - y coordenates for zi matrix
% zi - unfiltered data densities at (xi,yi)
% zif - filtered data densities at (xi,yi)
% [c,h] = contour matrix C as described in
% CONTOURC and a handle H to a contourgroup object
% hs = scatter points handles

Comments and Ratings (48)

Getting the same problem
Error using ksdensity>parse_args (line 162)
X must be a non-empty vector.

Rose luo

When I run the example, I got errors as follows
>> x = normrnd(10,1,1000,1);
>> y = x*3 + normrnd(10,1,1000,1);
>> scatter_kde(double(x),double(y), 'filled', 'MarkerSize', 100);
Error using ksdensity>parse_args (line 162)
X must be a non-empty vector.

Error in ksdensity (line 114)

Error in scatter_kde (line 33)
c = ksdensity([x,y], [x,y]);
How to solve it?

Jianglei Xu

What is the meaning of values in the colorbar. And the values always do not change, how can I change the values?

Dan Weaver

There is a dependency on having something called "Fixed-Point Designer"? Since I don't have that, I can't use this, MATLAB tells me. Dependencies should be declared upfront.

Jason Cook


It gives errors when the inputs are not double (e.g. if they are single)
I would suggest to add the lines:
x = double(x); y = double(y);

Jan Motl

Can anyone suggest a correction for low density edge effects?


Hi, there is a color bar after applied the scatplot What does the colorbar mean here?


great one!

I made a change to make it run faster with the 'circle' option for high number of points.

Instead of comparing the euclidean distance, I compare the square eucledian distance, saving a sqrt calculation:


case 'ci'
for k=1:Ld
dd(k) = sum( sqrt((x-x(k)).^2 + (y-y(k)).^2) < r );
area = pi*r^2;
dd = dd/area;

Now reads:

case 'ci'
SqR = r*r;
for k=1:Ld
dd(k) = sum( (x-x(k)).^2 + (y-y(k)).^2 < SqR );
area = pi*r^2;
dd = dd/area;

Note, that I only need one square evaluation and I dropped all the sqrt evaluations (w/ a million data points, that's a million evaluations)

Mohsen Naji

I have the same question as mimi and Aolin Jia.
what represent the 0 and the 60 in the colorbar? Is it possible to have it in term of density?
Is it possible to change the scale of the colorbar?
Otherwise, it is all I needed. Thank you.


Is there a functio for a 3D plot?

Takes forever to plot , if you have too many data.

Erik S.


I do have the same question as of Aolin Jia. I want a uniform colorbar distribution between; may I know how to change this?

Aolin Jia

The highest value in the colorbar is always 60 and the lowest is always 0. How can this be changed?


just what I needed! Thank you!


Im having problems using the 'voronoi' method. I am getting an error saying duplicate data values were found. But works well with 'circles'. Also i cant have a colourful plot of the points with contour lines. Can anyone help me out please ?


What do the numbers on the colorbar scale actually mean?

Jo Williams

I liked the idea behind the gsp subfunction, and it *is* much more efficient than scatter. I tried this section on its own. But it should be used with care - the order that you work through the colormap will affect the final plot, with later (default red) colours overlaid over earlier (default blue) wherever the dots are crowded close together. Especially if you shrink the figure this can result in a massive bias towards (default) red. To test the effect on your plot, try replacing the loop with

for k=size(map,1):-1:1


Why the data density is fixed. The highest value in the colorbar is always 60 and the lowest is always 0. How can this be changed?

Is there a way to identify the highest density position in the output variables?

Ellisa Dewi

can you show us the example code?



That`s very useful, thanks!

I just get an error saying duplicate data values were found and removed - the figure produced is empty. I thought the point of this script was to handle duplicate values as it is showing density?

Walter Guy

Definition of sub-function range() is missing (no add-on toolboxes), also several missing end statements for sub-functions. Once these errors are corrected it performs well. (R2012a)

Great piece of code - just what I needed! However, I was wondering if there is anyway to set the colors? i.e. like how you can set a colorbar limits in other matlab plotting tools. I can't seem to find a way.

I have one large density peak which sets the colorbar so high nothing else really shows up...


Very nice job! Very useful.

%this works fine for simple show
function hh=scatterC(varargin,n,method)
if nargin<2
n = 100; %bins
if nargin<3

[N C]=hist3(varargin,[n,n]);
[X Y]=meshgrid(C{1},C{2});
switch method
case 'p'
pcolor(X,Y,N);shading flat;
case 'c' %contourf

Garret Duffy

Excellent and useful plotting utility. Specification of command-line parameters is tricky however. Perhaps a runtime feedback of what input parameters were specified would be useful.

New Sung

It's what I am just looking for. Very nice! Thank you.

John D'Errico

A very nice utility for visualizing scattered data in 2-d. Excellent help, an H1 line, defaults for the variables, internal comments, etc.

A flaw is there is no error checking done on the parameters for viability. For example, the method argument is described as taking on one of 'circles', 'squares', or 'voronoi'. However, the code checks only the first two characters, both of which must be correct. This feature is undocumented. Note that strcmpi or strmatch are easy to use tools that will check for any shortened versions of the options. You can even ignore capitalization.

Similarly, there is no error checking on the po (plot options) argument. If you pass in a 5, you get an arbitrary result.

I would have liked to give this a 5 rating, and will happily raise my rating.


Nice work. thank you !

Birajashis Pattnaik

Ya simple but impressive,Good

m2 howard

nice, simple, and effective!


more efficient and cleaner

MATLAB Release Compatibility
Created with R14
Compatible with any release
Platform Compatibility
Windows macOS Linux