Saving multiple plots into one handle
6 次查看(过去 30 天)
显示 更早的评论
I am running a FEM program and need to plot the results for a few different solution iterations and the true solution. My FEM code runs in a loop so every loop I am plotting one solution but I noticed that drawing the figure in a loop is relatively slow compared to saving them all to a handle and plotting at the end. I am new to this method and saw you can use copyobj(), but it's not working correctly and I don't know what I am doing wrong here. Specifically my labels are not working correctly, so I suspect it is drawing too many lines. This is how it is supposed to look:
This is how it looks when I try to optimize the plotting time:
I have attached the file with the working (slow) plotting. What I changed to get the second result is in this (labelled %NEW):
color={'#0048BA','#C46210','#9F2B68','#3B7A57','#665D1E','#89CFF0','#FFB200','#7BB661','#00CED1','#DEB887'};
extraInputsLabel = {'interpreter','latex','fontsize',14};
extraInputsTitle = {'interpreter','latex','fontsize',24};
extraInputsAxis = {'interpreter','latex','fontsize',20};
ind1 = 0;
for m=1:p
ind1 = ind1+1;
ind2 = 1
while tol>tolerance
ind2 = ind2+1;
plt(ind2) = plot(x,uh,'Color',color{ind2},'DisplayName',strcat('$N_e = ',num2str(ne),'$'),LineStyle='--'); %NEW
hold on
end
plt(ind2+1) = plot(x,ut(x),'r','DisplayName','True sol'); %NEW
copyobj(plt,gca) %NEW
axis([0 L -2 2])
title(strcat('$p = ',num2str(m),'$'),extraInputsTitle{:})
xlabel('$x$',extraInputsAxis{:})
ylabel('$u(x)$',extraInputsAxis{:})
legend(extraInputsLabel{:})
figure(ind1+p)
plot(midx,err)
title('Element error',extraInputsTitle{:})
xlabel('$x$',extraInputsAxis{:})
ylabel('$\epsilon_e$',extraInputsAxis{:})
figure(ind1+2*p)
loglog(conv(:,2),conv(:,1))
title(strcat('Convergance plot $(n=',num2str(round(nc,2)),')$'),extraInputsTitle{:})
xlabel('$h_e$',extraInputsAxis{:})
ylabel('$\epsilon_e$',extraInputsAxis{:})
end
采纳的回答
Constantino Carlos Reyes-Aldasoro
2024-3-7
Why don't you save your results in a variable, as a matrix x2(ind2,:) = x; uh2(ind2,:)=uh; and then once you have all, then you plot.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Formatting and Annotation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!