## How to change colour of binary vector

Emily Cooper

### Emily Cooper (view profile)

さんによって質問されました 2019 年 7 月 7 日

### Star Strider (view profile)

さんによって 編集されました 2019 年 7 月 8 日
Star Strider

### Star Strider (view profile)

さんの 回答が採用されました
Hi,
I have a dataset with vectors x,y,a,b (all of the same length, single column each)
I need to make a 2D plot of x,y but only dependent on whether the point occurs in both a and b (so eliminating data points that only occur in one or the other). I have managed to code for this using scatter3 (and then just rotating the figure to show a 2D perspective) like this:
figure(1)
a(a == 0) = NaN;
index = ( isnan(b) & ~isnan(a));
index1 = double(index)
index1(index1 == 1) = NaN;
scatter3(x,y,index1,pointsize,a,'filled')
hold on;
a1(a1 == 0) = NaN;
indexa = ( isnan(b) & ~isnan(a1));
indexa1 = double(indexa)
indexa1(indexa1 == 1) = NaN;
scatter3(x,y,indexa1,pointsize,a1,'x')
hold on;
etc
My code isn't quite right because the only way to plot what I want is to have the colour set as a - otherwise it plots all data points from x and y regardless of index1, and i'm not sure why, so I'd be grateful for any suggestions for how to code the whole thing differently!
Eventually I need to plot lots of different vectors in the same way on the same graph. But I need each set to be coloured differently (just having different marker types doesn't make the image clear enough). - and as I have to set a as the colour, i cant figure this out.
Thanks :)

the cyclist

### the cyclist (view profile)

on 7 Jul 2019
Can you please clarify what you mean by the phrase "but only dependent on whether the point occurs in both a and b"?
Do you mean, for example,
• a and b have to have the same value?
• a and b can be different, but both must be non-NaN value?
• a and b can be different, but both must be non-zero?
Or something else?
Emily Cooper

### Emily Cooper (view profile)

on 8 Jul 2019
Hi,
a is a binary vector and b is a vector where values are either something like 234967 or are NaN. To be included in the figure, a must have a value of 1 and b must have a numerical value (not NaN).
So I tried to convert 0s in a to NaN and then exclude NaN from the data.
(If the value in a is 0 but corresponding (same row) value in b is numerical, the data point is not included)

サインイン to comment.

## 1 件の回答

### Star Strider (view profile)

on 7 Jul 2019
Edited by Star Strider

### Star Strider (view profile)

on 8 Jul 2019

Try this:
x = 0:19;
y = sin(2*pi*x/19);
a = randi(5, 20, 1);
b = randi(5, 20, 1);
Lidx = a == b;
Q1 = x(Lidx);
Q2 = y(Lidx);
Q3 = find(Lidx);
figure
scatter(x(Lidx)', y(Lidx)', 20, find(Lidx), 'filled')
EDIT —
a is a binary vector and b is a vector where values are either something like 234967 or are NaN. To be included in the figure, a must have a value of 1 and b must have a numerical value (not NaN).
Assuming that by ‘binary’ you mean ‘logical’, try this:
index = a & ~isnan(b);
If ‘a’ is numeric (not logical), you can easily convert it to being logical with:
a = a == 1;
then:
index = a & ~isnan(b);
Both ‘a’ and ‘b’ must have the same row and column sizes.

#### 0 件のコメント

サインイン to comment.

Translated by