Matlab绘图图例自动化

Matlab绘图图例自动化,matlab,plot,legend,legend-properties,Matlab,Plot,Legend,Legend Properties,我正在解一个依赖于x和t的偏微分方程,并且想展示一些t值在所有x上的解。我正在尝试编写代码,将自动生成此绘图的图例。例如,如果我在t=0、1、5和9处绘制解决方案,我希望图例显示“t=0”、“t=1”等等 假设我的解在矩阵u中。我的时间用向量t表示。我正在采样的时间的索引将是向量tsampled。注意,这与我想要的绘图时间不同。如果我在向量t的索引6处花费时间,这个值不是6,但可以是任何值 我目前正试图通过以下方式做到这一点: tlen = max(size(t)); tsampled = [2

我正在解一个依赖于x和t的偏微分方程,并且想展示一些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
但这会产生错误“无法将字符转换为单元格”

当我尝试使用该行时:

legend (sprintf('t = %0.2f s \n', t(tsampled)))
我在图表上得到了正确的“字符串”,但它们的格式如下:


我想在蓝线旁边显示“t=10.20s”,橙色线旁边显示“t=91.84s”,以此类推。如何获得所需的结果?

因为您预定义了
legn
作为单元格数组,所以需要使用
{}
而不是
()
来获得正确的索引。尝试:

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

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

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

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

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

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

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


您能告诉我们您是如何定义
t
u
的吗?u被定义为“pdepe”调用的结果,t简单地表示为:t=linspace(0505000);对于i=1:1:size(tsampled),您的问题可能来自于在
行中使用
size
而不是
length
。请改为尝试
length
。但我不能确切地说,因为我无法重现你的问题。我的问题在于传奇的生成,而不是数据本身。基本上,我如何生成图例来完成我希望它完成的任务。就数据而言,它确实有效。我理解
tsampled
是一个向量,因此
size(tsampled)
为某些整数
n
返回
[1 n]
。这将导致循环只执行一次。我怀疑你正在一次绘制所有数据。而行
图例(sprintf('t=%0.2f s\n',t(tsampled))
正在生成一个包含所有“t=”行的大字符串。您能告诉我们如何定义
t
u
?u被定义为“pdepe”调用的结果,而t只是:t=linspace(0505000);对于i=1:1:size(tsampled)
,您的问题可能来自于在
行中使用
size
而不是
length
。请改为尝试
length
。但我不能确切地说,因为我无法重现你的问题。我的问题在于传奇的生成,而不是数据本身。基本上,我如何生成图例来完成我希望它完成的任务。就数据而言,它确实有效。我理解
tsampled
是一个向量,因此
size(tsampled)
为某些整数
n
返回
[1 n]
。这将导致循环只执行一次。我怀疑你正在一次绘制所有数据。而行
图例(sprintf('t=%0.2f s\n',t(tsampled))
正在生成一个包含所有“t=”行的大字符串。您能告诉我们如何定义
t
u
?u被定义为“pdepe”调用的结果,而t只是:t=linspace(0505000);对于i=1:1:size(tsampled)
,您的问题可能来自于在
行中使用
size
而不是
length
。请改为尝试
length
。但我不能确切地说,因为我无法重现你的问题。我的问题在于传奇的生成,而不是数据本身。基本上,我如何生成图例来完成我希望它完成的任务。就数据而言,它确实有效。我理解
tsampled
是一个向量,因此
size(tsampled)
为某些整数
n
返回
[1 n]
。这将导致循环只执行一次。我怀疑你正在一次绘制所有数据。而行
图例(sprintf('t=%0.2f s\n',t(tsampled))
正在生成一个包含所有“t=”行的大字符串。您能告诉我们如何定义
t
u
?u被定义为“pdepe”调用的结果,而t只是:t=linspace(0505000);对于i=1:1:size(tsampled)
,您的问题可能来自于在
行中使用
size
而不是
length
。请改为尝试
length
。但我不能确切地说,因为我无法重现你的问题。我的问题在于传奇的生成,而不是数据本身。基本上,我如何生成图例来完成我希望它完成的任务。就数据而言,它确实有效。我理解
tsampled
是一个向量,因此
size(tsampled)
为某些整数
n
返回
[1 n]
。这将导致循环只执行一次。我怀疑你正在一次绘制所有数据。而行
图例(sprintf('t=%0.2f s\n',t(tsampled))
正在生成一个包含所有“t=”行的大字符串。