Plot blocks of points with a specific color

Hi,
I got these points and I want to colour every 4 points with a specific color:
x = [ 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5]';
y = [ 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5]';
Point 1:4 yellow, 5:8 blue, 9:12 red, etc, and I want to plot all the 25 entries. the last "block" with just have the row number 25.
I though doing this:
[n,~] = size(x);
block_points = 4;
t_start = 1:block_points:n;
t_end = block_points:block_points:n;
but I got a problem with t_end, only has size 6, while t_start has size 7, due to the last block that only has 1 number.
Thanks for your help

4 Comments

If you keep closing the question it'll decrease your chance of getting an answer in the future
I just want to delete que question, solved the problem on my own
ok so the effort put in order to help is for nothing? Just leave it open just don‘t accept the answer. Post your solution as an answer and accept it.
First of all, I did not say that your help was for nothing, I appreatiate the time you spend on my question, like I wrote in the last comment I wrote.
I think I should not accept your answer since, it was not what I looking for, I wanted a more automatic procedure, depending on the variables and not the numbers. I was looking for something that could always work, no matter the X and Y provided, and I was able to acomplish that.
Like I said, thanks for your interest in my question, and the effort that you spent on it.

Sign in to comment.

 Accepted Answer

This is what I did to solve my question:
from a generic
X = [1:25]';
Y = [1:25]';
I want to plot each number of "rows" to a specific color
[n,m] = size(X);
rows = 3;
columns = ceil(n/rows);
extra_row = columns * rows;
X(n+1:extra_row) = NaN; Y(n+1:extra_row) = NaN;
X_new = reshape(X,rows,columns); Y_new = reshape(Y,rows,columns);
legenda = sprintfc('Mes %d', 1:columns);
for j = 1:size(X_new,2)
plot(X_new(:,j),Y_new(:,j),'*')
hold on
end

More Answers (1)

madhan ravi
madhan ravi on 26 Nov 2018
Edited: madhan ravi on 26 Nov 2018
EDITED
xx = [ 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5]';
yy = [ 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5]';
x=reshape(xx(1:end-1),4,[]);
y=reshape(yy(1:end-1),4,[]);
s={'-oy','-ob','-or','-og','-om','-oy'};
for i=1:size(x,1)
plot(x(i,:),y(i,:),s{i})
hold on
end
plot(xx(end),yy(end),'ok',...
'markerFaceColor','k')

9 Comments

Tiago Dias
Tiago Dias on 26 Nov 2018
Edited: Tiago Dias on 26 Nov 2018
Thanks for yout time, but I perhaps was not clear. your code only plot 24 points and not the 25. I need for this example, 6 colors since size(x,1)/ block_points = 6.25, rounder is 7.
row 1:4 -> Color1
row 5:8 -> Color 2
row 9:12 -> Color 3
row 13:16 -> Color 4
row 17:20 -> Color 5
row 21:24 -> Color 6
riw 25:25 -> Color 7
yes in the similar way, read more about reshape()
If my X has 26 of size, your code still doesnt work, was looking for a think more depende on the size of the inputs, will try to reshape it myself, since i think it is a good approach, thanks for that
yes because reshape splits a vector into the number of elements it has
but i got 25 elements, but reshape, only uses 24, if I could enter another column for the 25 th value would be great.
25th element is plotted after the loop , didn't you check my edited answer?
I understood that, but if my X has 26 elements, i need to handly plot the last 2. if it has 27 i need to handly plot the last 3.
I would prefer, if it is doable, an aprroach that would read the size of X and reshape in function of the number 4, or 3 or 5 or whatever I need.
I would like to do a reshape of x, transform a X of 1xm into a 4xceil(n/4), where n is the number of rows of X.
I would transform a 26x1 matrix into a 4x7 matrix, with the 2 last entries could be NaN values for example.
x(1) x(5) x(9) x(13) x(17) x(21) x(25)
x(2) x(6) x(10) x(14) x(18) x(22) NaN
x(3) x(7) x(11) x(15) x(19) x(23) NaN
x(4) x(8) x(12) x(16) x(20) x(24) NaN
i want the reshape to do this, or someother tool to get this, when i say i need 4 rows and 7 columns, that i can calculate there 2 parameters based on my original x
"I would transform a 26x1 matrix into a 4x7 matrix, with the 2 last entries could be NaN values for example."
matrix=[rand(26,1);zeros(2,1)] %this will do what you want just pad the remaining elements with zeros
I am not explaining my self properly, i want it to be automaticly, i created a new topic for this, thanks for your time !

Sign in to comment.

Categories

Asked:

on 26 Nov 2018

Answered:

on 28 Nov 2018

Community Treasure Hunt

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

Start Hunting!