Plotting multiple lines with a for loop: only last plot shows

Hello everyone!
I am trying to plot my results following Temperatures for a Transient Thermal Model on a Square on https://www.mathworks.com/help/pde/ug/pde.steadystatethermalresults.interpolatetemperature.html. However, the only plot that shows is the one at the end of the t array (t = 952), plus an unlabelled one: could anybody please help me understand what I am doing differently?
X = cell2mat(num2cell(linspace(-3,3,1001)))
class(X)
Y = cell2mat(num2cell(ones(size(X))));
class(Y)
Tintrp = interpolateTemperature(results,X,Y,1:length(tlist))
class(Tintrp)
tf = isvector(Tintrp)
tf = ismatrix(Tintrp)
tf = isnumeric(Tintrp)
Xs = (linspace(-3,3,1001))
Xs = reshape(Xs,[],1)
tf = isvector(Xs)
tf = isnumeric(Xs)
figure
xlabel("x")
ylabel("Tintrp")
t = [2:50:1001]
% for i = t
% Tintrp(:,i)
% tf = isnumeric(Tintrp(:,i))
% p(i) = plot(Xs,Tintrp(:,i),"DisplayName", ...
% strcat("t=",num2str(tlist(i))));
% hold on
% end
for i = t
p(i) = plot(Xs,Tintrp(:,i),"DisplayName", ...
strcat("t=",num2str(tlist(i))));
legend(p(i))
hold on
end
legend

 채택된 답변

Voss
Voss 2024년 6월 11일

0 개 추천

Remove legend(p(i)) from inside the for loop.
Replace the legend after the for loop with legend(p(t)).

댓글 수: 5

Much cleaner:
t = [2:50:1001];
hold on
p = gobjects(size(t)); % preallocate handle array
for i = 1:numel(t)
p(i) = plot(Xs,Tintrp(:,t(i)),"DisplayName", ...
strcat("t=",num2str(tlist(t(i)))));
end
legend(p)
I agree; the code in that documentation page could use some improvements.
Thank you so much, @Voss and @Adam Danz! I greatly appreciate your help. It is working now.
You're welcome!
I didn't see that was from a doc page. I'll take care of that.

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

추가 답변 (0개)

질문:

2024년 6월 11일

댓글:

2024년 6월 11일

Community Treasure Hunt

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

Start Hunting!

Translated by