Matlab绘图图例自动化

时间:2015-04-25 20:50:26

标签: matlab plot legend legend-properties

我正在解决一个依赖于x和t的pde,并希望在t的几个值上显示所有x的解。我正在尝试编写将自动生成此图的图例的代码。例如,如果我在t = 0,1,5和9处绘制解决方案,我希望图例显示“t = 0”,“t = 1”,依此类推。

假设我的解决方案以矩阵u表示。我的时代是在矢量t。我正在采样的时间索引将在向量tsampled中。请注意,这与我想要的时间不同。如果我在矢量t的索引6处占用时间,则该值不是6,但可以是任何值。

我目前正试图通过以下方式执行此操作:

tlen = max(size(t));
tsampled = [2, floor(tlen/5), floor(2*tlen/5), floor(3*tlen/5), floor(4*tlen/5), floor(tlen)];
t(tsampled)
legnd = {'', '', '', '', '', ''};
hold on
for i = 1:1:size(tsampled) 
plot(x,u(tsampled(i),:))
legnd(i) = sprintf('t = %0.2f s \n', t(tsampled(i)));
end
title('my PDE solution');
legend(legnd, 0);
xlabel('x')
ylabel('u')
hold off

但这会产生错误“无法从char转换为单元格。”

当我尝试使用该行时:

legend (sprintf('t = %0.2f s \n', t(tsampled)))

我在图表上得到了正确的“字符串”,但它们的格式如下: enter image description here

我希望这在蓝线旁边显示“t = 10.20 s”,在橙色线旁边显示“t = 91.84 s”,依此类推。我如何得到我想要的结果?

1 个答案:

答案 0 :(得分:3)

由于您已将legnd预定义为单元格数组,因此需要使用{}而不是()来获取正确的索引。尝试:

legnd{i} = sprintf('t = %0.2f s \n', t(tsampled(i)));