MATLAB Plot - 多个数据行的图例条目 - getcolumn

时间:2017-08-05 19:26:03

标签: matlab matlab-figure legend

考虑以下示例:

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)的问题。

1 个答案:

答案 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对象并设置图例属性。