MATLAB Answers


Plot points in a different colour depending on co ordinates

Asked by Andy
on 18 Feb 2013

I want to be able to plot my points in a scatter plot and if the points are within the co ordinates of two circles they will be plotted in different colours. At the moment i can plot my points within the limits i need.

      x = randi([-35,165],[2000,1]);
      x = x';
      y = randi([-20,80],[2000,1]);
      y = y';

I can also plot points with different colours within two circles.

      num1 = 2000;
      radius = 30;
      theta = rand(1,num1)*(2*pi);
      r = sqrt(rand(1,num1))*radius;
      xCor = r.*cos(theta);
      yCor = r.*sin(theta);
      hold on;
      num = 1000;
      rad = 10;
      theta = rand(1,num)*(2*pi);
      r = sqrt(rand(1,num))*rad;
      xCor2 = r.*cos(theta);
      yCor2 = r.*sin(theta);

What i cant seem to work out is how do i use the original points in my first section of code and then change the colour points which are within the limits of a circle (with a given centre point)? I am aiming not to use loops as well.

Thanks You



No products are associated with this question.

4 Answers

Answer by bym
on 19 Feb 2013

Maybe this will help as an example:

x = rand(1000,1);
y = rand(1000,1);
yg = y;
yb = y;
plot(x,[yg yb],'.')
axis square


Answer by Image Analyst
on 19 Feb 2013

And a slight variation where the points continuously vary color from the center of the circle:

x = rand(1000,1);
y = rand(1000,1);
distances = ((x-.5).^2 + (y-0.5).^2).^0.5;
% Normalize - divide my sqrt(maxX^2 + maxY^2)
distances = distances / sqrt(.5^2 + .5^2);
[sortedDistances sortIndexes] = sort(distances);
% Arrange the data so that points close to the center
% use the blue end of the colormap, and points 
% close to the edge use the red end of the colormap.
xs = x(sortIndexes);
ys = y(sortIndexes);
cmap = jet(length(x)); % Make 1000 colors.
scatter(xs, ys, 10, cmap, 'filled')
grid on;
title('Points where color depends on distance from center', ...
	'FontSize', 30);
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);
% Give a name to the title bar.
set(gcf,'name','Demo by ImageAnalyst','numbertitle','off') 


Answer by Walter Roberson
on 19 Feb 2013

Use scatter() instead of plot(). The C (color) parameter of scatter() can be an array of RGB rows, one row per point.


Answer by Andy
on 19 Feb 2013

Thank you for the replies. I managed to work it out with a combination in the end. In the end i used a for loop, going through my generated numbers. I then checked the distance of the co ordinates away from the centre point of my circle and plotted them with the right colour accordingly.


Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi test

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!