循环中的 matlab 图例条目不会显示在图例中

matlab legend entries from loop don't show up in legend

注释的代码不起作用,未注释的代码有效。如果线条绘制在循环中,为什​​么我不能指定图例中应包含哪些线条对象?

labels = {'1', '2', '3', '4', '5', '6', '7'}
% for i = 1:7
%     [~, I] = min( abs(A - B(i)) );
%     h(i) = plot(T(:,I), Z, '-', 'Parent', ax1, 'color', colors(i,:));
% end
% legend( h, labels, 'Location', 'NorthEast');
[~, I] = min( abs(A - B(1)) );
h1 = plot(T(:,I), Z, '-', 'Parent', ax1, 'color', colors(1,:));
[~, I] = min( abs(A - B(2)) );
h2 = plot(T(:,I), Z, '-', 'Parent', ax1, 'color', colors(2,:));
[~, I] = min( abs(A - B(3)) );
h3 = plot(T(:,I), Z, '-', 'Parent', ax1, 'color', colors(3,:));
[~, I] = min( abs(A - B(4)) );
h4 = plot(T(:,I), Z, '-', 'Parent', ax1, 'color', colors(4,:));
[~, I] = min( abs(A - B(5)) );
h5 = plot(T, Z, '-', 'Parent', ax1, 'color', colors(5,:));
[~, I] = min( abs(A - B(6)) );
h6 = plot(T(:,I), Z, '-', 'Parent', ax1, 'color', colors(6,:));
[~, I] = min( abs(A - B(7)) );
h7 = plot(T(:,I), Z, '-', 'Parent', ax1, 'color', colors(7,:));
legend([h1, h2, h3, h4, h5, h6, h7], labels, 'Location', 'NorthEast');

legend(target,___) 使用 target 指定的坐标轴或图表(不是线系列的句柄)而不是当前坐标轴或图表。将目标指定为第一个输入参数。您可以找到更详细的描述 here。所以在你的代码中:

legend(h,__)

应该是

legend(ax1,__)

或者干脆

legend(gca,__)

更一般地说,有一些解决方案更具可读性和常用:

解决方案 #1:指定每行的显示名称。

for i = 1:7
 [~, I] = min( abs(A - B(i)) );
 h(i) = plot(T(:,I), Z, '-', 'Parent', ax1, 'color', colors(i,:),'DisplayName',labels{i});end;legend on

解决方案 #2:直接调用 legend(labels)

labels = {'1', '2', '3', '4', '5', '6', '7'}
x = 1:100;
axes(ax1) % specify which axes the next plot should use
for i = 1:7
    plot(x,rand(size(x)));
    hold on
end
hold off
legend(labels, 'Location', 'NorthEast');