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

 Accepted Answer

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

5 Comments

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.
I didn't see that was from a doc page. I'll take care of that.

Sign in to comment.

More Answers (0)

Asked:

on 11 Jun 2024

Commented:

on 11 Jun 2024

Community Treasure Hunt

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

Start Hunting!