Discover MakerZone

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

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

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';
      plot(x,y,'kx','LineWidth',2,'MarkerSize',10)

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);
      plot(xCor,yCor,'rx','LineWidth',2,'MarkerSize',10)
      subplot(1,1,1)
      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);
      plot(xCor2,yCor2,'gx','LineWidth',2,'MarkerSize',10)

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

0 Comments

Andy

Products

No products are associated with this question.

4 Answers

Answer by bym on 19 Feb 2013

Maybe this will help as an example:

clc;clear
x = rand(1000,1);
y = rand(1000,1);
yg = y;
yg(hypot(x-.5,y-.5)<.25)=NaN;
yb = y;
yb(hypot(x-.5,y-.5)>=.25)=NaN;
plot(x,[yg yb],'.')
axis square

0 Comments

bym
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') 

0 Comments

Image Analyst
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.

0 Comments

Walter Roberson
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.

0 Comments

Andy

Contact us