Subplot in loop just plotting the first y value?

조회 수: 15 (최근 30일)
Marcus Silverberg
Marcus Silverberg 2016년 9월 6일
댓글: Marcus Silverberg 2016년 9월 6일
for n=[2:5]
for c=[10,20,40,80]
figure(1)
subplot(1,4,n-1)
x=linspace(0,2*pi,c);
y=atan(x)
plot(y)
end
end
This loop creates four subloops in one window, so far so good. But spent the last eternity trying to get Matlab to plot four different y values, not just four copies of the first.
Pic:
  댓글 수: 3
Stephen23
Stephen23 2016년 9월 6일
This is a good example of why bad code formatting makes it hard to write good code: there are actually two loops, and this is the cause of the problem... however the nested loop is not clear because if the lack of indentation.
Use clear, consistent formatting and it makes writing, reading, and understanding code one million times easier. MATLAB's default formatting is usually perfect, so just use that. TIP: select all of the code and click ctrl+i.
Marcus Silverberg
Marcus Silverberg 2016년 9월 6일
Wow thanks for the crtl+i command. It did not solve the problem, but I got the idea.

댓글을 달려면 로그인하십시오.

채택된 답변

Adam
Adam 2016년 9월 6일
편집: Adam 2016년 9월 6일
Try this. I haven't tested it, just changed it off the top of my head, but the idea is what you want even if there are a couple of things you need to fix in the code - i.e. get rid of the nested loops and just index into c so that you do 4 different plots.
c=[10,20,40,80]
for n=1:4
figure(1)
subplot(1,4,n)
x=linspace(0,2*pi,c(n));
y=atan(x);
plot(y)
end
Edit: I have tested now after a couple of fixes to my original and this seems to work.

추가 답변 (1개)

Mischa Kim
Mischa Kim 2016년 9월 6일
Marcus, add a
hold on
after the plot command.
  댓글 수: 2
Marcus Silverberg
Marcus Silverberg 2016년 9월 6일
Thanks, that helped a bit. But now I got all the four values in each of the subplots.. The point is to get c=10 in the first subplot, c=20 in the second..etc.
Mischa Kim
Mischa Kim 2016년 9월 6일
Not quite sure, what you are trying to achieve. If it is only one plot per subplot, why not use indexing?
c = [10,20,40,80];
for n = 1:4
subplot(1,4,n)
x = linspace(0,2*pi,c(n));
y = atan(x);
plot(y,'*')
end

댓글을 달려면 로그인하십시오.

태그

Community Treasure Hunt

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

Start Hunting!

Translated by