Hi, my following piece of code does not work as it expected to and I don't know how to fix it yet. Any suggestions? Thanks!
A = [5;5;5;3;3;2];
B = [10;4;10;10;4;4];
if A == 5
plot(A,B,'rx')
elseif A == 3
hold on
plot(A,B,'bx')
else
hold on
plot(A,B,'gx')
end

2 个评论

"if statement not working"
Did you read the IF documentation (to know how it works with non-scalar conditions), before deciding that it is "not working" ?
@Stephen I think Matlab should throw a warning on non-scalar inputs, maybe even an error. I've many people surprised by the implicit call to all that happens here.
%actually, if does this:
if ~isempty(expression) && all(expression)

请先登录,再进行评论。

 采纳的回答

Rik
Rik 2019-4-5
编辑:Rik 2019-4-5
What you probably think should happen is in the code below, however, there is a better way.
A = [5;5;5;3;3;2];
B = [10;4;10;10;4;4];
figure(1)
clf(1),axes;
for n=1:numel(A)
if A(n) == 5
plot(A(n),B(n),'rx')
elseif A(n) == 3
hold on
plot(A(n),B(n),'bx')
else
hold on
plot(A(n),B(n),'gx')
end
end
axis([1 6 3 11])
The better way is to use logical indexing:
A = [5;5;5;3;3;2];
B = [10;4;10;10;4;4];
figure(1),clf(1)
already_plotted=false(size(A));
L= A == 5;
plot(A(L),B(L),'rx')
already_plotted(L)=true;
hold on
L= A == 3 & ~already_plotted;
plot(A(L),B(L),'bx')
already_plotted(L)=true;
L= ~already_plotted;
plot(A(L),B(L),'gx')
axis([1 6 3 11])
axis([1 6 3 11])

3 个评论

Thanks Rik! Also, only 4 of my 6 points show up...
See my edited answer. You will only see 5 points, because two of them overlap (5,10).
Makes sense. Thank you once again!

请先登录,再进行评论。

更多回答(0 个)

类别

在 帮助中心 和 File Exchange 中查找有关 Annotations 的更多信息

产品

版本

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by