考虑以下示例:
x = magic(3);
figure(1); clf(1);
plot( x, '-r', 'DisplayName', 'Magic' );
legend( 'show' );
MATLAB R2014a 中生成的图例条目为
getcolumn(魔术,1)
getcolumn(魔术,2)
getcolumn(魔术,3)
问题源于function [leg,labelhandles,outH,outM] = legend(varargin)
中的legend.m
( Copyright 1984-2012 The MathWorks,Inc。),第628行:
str{k} = get(ch(k),'DisplayName');
更具体地说,函数get
getcolumn(
和, <Column Number>)
。是否有一种简单的方法可以为具有相同视觉属性的DisplayName
之后命名的多个数据行准确显示一个图例条目(或多个,但没有预先添加和附加的字符串)?
另一种选择当然是通过绘图句柄以编程方式创建多个(或一个)图例条目(见下文),但我想简单而简单。
一个条目:
x = magic(3);
figure(1); clf(1);
h = plot( x, '-r' );
legend( h(1), 'Magic' );
多个条目:
x = magic(3);
figure(1); clf(1);
h = plot( x, '-r' );
strL = cell( 1, numel(h) );
for k = 1:numel(h)
strL{k} = sprintf( 'Magic %d', k );
end
legend( h, strL );
在MATLAB R2014b 中,第一个代码示例不再出现getcolumn(Name,Row)的问题。
答案 0 :(得分:2)
如果你想用短语法为图例条目设置多个显示名称,你只需要用它们准备一个单元格数组,让我们说它被称为leg_names
,然后使用set
一次将它们应用于所有人:
set(p,{'DisplayName'},leg_names);
让我们来看一个例子:
x = magic(3); % your data
p = plot( x,'-r'); % plot and get an array of handles to the lines
% create a list of the desired names for the legend entries:
leg_names = [repmat('Magic ',size(x,2),1) num2str((1:size(x,2)).')];
set(p,{'DisplayName'},cellstr(leg_names)); % set all display names
legend('show'); % show the legend
结果与问题末尾的示例完全相同。
另请注意,不建议使用语法[lgd,icons,plots,txt] = legend(___)
(from the docs):
注意:建议不要使用此语法。它会创建一个不支持所有图形功能的图例。而是使用
lgd = legend(__)
语法返回Legend对象并设置图例属性。