필터 지우기
필터 지우기

Coloring scatterplots based on frequency of point occurrence in input

조회 수: 27 (최근 30일)
Alex V
Alex V 2012년 2월 13일
답변: Anita Joshi 2017년 6월 17일
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.

채택된 답변

Jiro Doke
Jiro Doke 2012년 2월 13일
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
Sukuchha
Sukuchha 2012년 2월 16일
thanks jiro,it worked so beautifully ! The original guy who posted this question seems to gone to sleep. If i could i would accept your question.
jason
jason 2013년 4월 9일
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

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

Image Analyst
Image Analyst 2012년 2월 13일
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
Alex V
Alex V 2012년 2월 13일
I don't really see how a histogram will help.
I was going to try to sort the data (it is discreet), then for every x coordinate count how many times the same y coordinate appears.
I also don't see how to pass into scatter() the colors of specific points (as opposed to making them all the same).
Image Analyst
Image Analyst 2012년 2월 13일
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.

댓글을 달려면 로그인하십시오.


Sukuchha
Sukuchha 2012년 2월 14일
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 2017년 6월 17일
Hallo everyone, I would like to print the number of occurance of the 2D data in the same graph.. how do I do it?

카테고리

Help CenterFile Exchange에서 Discrete Data Plots에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by