循环中的 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');
注释的代码不起作用,未注释的代码有效。如果线条绘制在循环中,为什么我不能指定图例中应包含哪些线条对象?
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');