% 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
% INPUT VARIABLES:
% 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
% OUTPUT VARIABLE:
% 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
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);
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?
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:
dd(k) = sum( sqrt((x-x(k)).^2 + (y-y(k)).^2) < r );
area = pi*r^2;
dd = dd/area;
SqR = r*r;
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)
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.
I do have the same question as of Aolin Jia. I want a uniform colorbar distribution between; may I know how to change this?
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?
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
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?
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?
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
n = 100; %bins
case 'c' %contourf
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.
It's what I am just looking for. Very nice! Thank you.
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 !
Ya simple but impressive,Good
nice, simple, and effective!