for循环中的每个图的子图和图例

时间:2017-03-28 07:17:10

标签: matlab for-loop legend subplot

我正在尝试使用for循环编写一个matlab脚本,我想制作一个4 * 2的子图。

我尝试在每个图表中使用legend函数,但是我遇到了问题。我打算每个图表都使用legend('Motor1+i')作为图例,但所有图表都具有相同的名称Motor1+i

我希望Motor1Motor2Motor3,...

g_wPWMOut=[g_wPWMOut0 g_wPWMOut1 g_wPWMOut2 g_wPWMOut3 g_wPWMOut4 ...
              g_wPWMOut5 g_wPWMOut6 g_wPWMOut7];

figure
for i=0:1:7;
   subplot(421+i)
   plot(FCCTime, g_wPWMOut(:,(1+i)))
   grid on
   legend('Motor1+i')
   ymax = max(g_wPWMOut(:,(1+i)));
   ymin = min(g_wPWMOut(:,(1+i)));
   xmax = max(FCCTime);
   xmin = min(FCCTime);
   axis([xmin-((xmax-xmin)*0.05) xmax+((xmax-xmin)*0.05) ...
   ymin-((ymax-ymin)*0.05) ymax+((ymax-ymin)*0.05)])
end

2 个答案:

答案 0 :(得分:0)

我没有测试过,但请尝试:

mylegend = 'Motor';
mylegend = [mylegend num2str(i)];
legend(mylegend);

答案 1 :(得分:0)

首先,我想警告您,不建议使用i作为变量,因为它被用作复杂的虚数单位。以ii为例。

然后,您误解了subplot的用法。您将421+i作为参数,但是在您的情况下,它需要3个参数。您应该给4,2,1+i

最后,您可以使用num2strii转换为字符串,并与strcat结合使用Motorii创建新的字符串。

for ii = 0:7
    subplot(4,2,1+ii);
    plot(FCCTime, g_wPWMOut(:,(1+ii)))
    legend(strcat('Motor', num2str(1+ii)))
end

您将得到类似的结果:

legend