MATLAB Answers

Coloring scatterplots based on frequency of point occurrence in input

45 views (last 30 days)
Alex V
Alex V on 13 Feb 2012
Answered: Anita Joshi on 17 Jun 2017
Hello,
I have an input file (.txt) that is approximately 10,000 data points, all of the form "x y"
I know that many of the points are repeats. Is it possible to, when I load and scatterplot this data, to color points based on how frequently they occur in the input? For instance the color could be (R,G,B) = (f,f,f) where f is the amount of times the point appears in input.
My current code (that makes all points the same blue color) looks like this:
data=load('input.txt')
scatter(data(:,1),data(:,2),0.3)
I am new to Matlab (but not to programming) so the more explanation the better!
Thank you in advance.

Accepted Answer

jiro
jiro on 13 Feb 2012
EDIT: unique instead of sort
You should be able to do it with:
unique (use the 'rows' parameter)
hist (use the n = hist(Y,x) syntax)
scatter (use the scatter(X,Y,S,C) syntax)
Okay, so here's how I would do it. I must say it was a little trickier than I had expected. Maybe someone else can come up with an easier solution.
A = fix(rand(100,1)*10);
B = fix(rand(100,1)*10);
AB =[A B];
% Find unique rows and corresponding indices
[uniqueAB, ~, n] = unique(AB, 'rows');
% Find number of occurrences
nHist = hist(n, unique(n));
mx = max(nHist);
% Create colors for each number of occurrence
colors = jet(mx);
colormap(colors);
% Construct a color matrix
cMatrix = colors(nHist, :);
% Create scatter plot
scatter(uniqueAB(:, 1), uniqueAB(:, 2), 25, cMatrix, 'filled');
colorbar('YTick', linspace(1/(2*mx), 1-1/(2*mx), mx), ...
'YTickLabel', 1:mx);
  2 Comments
jason
jason on 9 Apr 2013
Thank you Jiro, this worked very well. At the moment, I need to extend this further to include two sets of scatters on the same figure. Can you please advise me how can I make them share the same colorbar scale, or color setting. I think one data the max frequency is 130 where the other one is about 50. thanks

Sign in to comment.

More Answers (3)

Image Analyst
Image Analyst on 13 Feb 2012
You can pass in the colors of each point. The trick is that you first have to call hist(data) to find the frequency of each range of your data and assign that to a particular color. I think you can do it - it's not that hard. Give it a shot. If you really can't come back for help.
  2 Comments
Image Analyst
Image Analyst on 13 Feb 2012
I see. And what do you think the histogram does? Do you think that it might "for every x coordinate count how many times the same y coordinate appears"? Now you have two people telling you to use the hist.

Sign in to comment.


Sukuchha
Sukuchha on 14 Feb 2012
Hi image analyst and jiro,
I tried to follow your instruction but couldnot succeed !
This is what i did.
A = fix(rand(100,1)*10);
B = fix(rand(100,1)*10);
AB =[A B];
sort_AB = sort(AB,1);
[n,xout] = hist(sort_AB)
But, with hist command, n is nx2 matrix where each columns of sort_AB is taken independently. So n will not give me, how many points are within 10 equally divided range.
And also please explain how to make a C matrix?
A example with code will surely make things clear :)

Anita Joshi
Anita Joshi on 17 Jun 2017
Hallo everyone, I would like to print the number of occurance of the 2D data in the same graph.. how do I do it?

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!