将添加条目添加到现有图例

现有的传说可能难以管理。例如,如果你的绘图有两行,但只有一行有一个图例条目,并且应该保持这种方式,那么添加带有图例条目的第三行可能很困难。例:

figure
hold on
fplot(@sin)
fplot(@cos)
legend sin  % Add only a legend entry for sin
hTan = fplot(@tan);  % Make sure to get the handle, hTan, to the graphics object you want to add to the legend

现在,要为 tan 添加一个图例条目,但不为 cos 添加,以下任何一行都不会起作用; 他们都以某种方式失败了:

legend tangent  % Replaces current legend -> fail
legend -DynamicLegend  % Undocumented feature, adds 'cos', which shouldn't be added -> fail
legend sine tangent  % Sets cos DisplayName to 'tangent' -> fail
legend sine '' tangent  % Sets cos DisplayName, albeit empty -> fail
legend(f)

幸运的是,一个名为 PlotChildren 的无证传奇属性跟踪了父母 1 的孩子。因此,要采用的方法是通过 PlotChildren 属性显式设置图例的子项,如下所示:

hTan.DisplayName = 'tangent';  % Set the graphics object's display name
l = legend;
l.PlotChildren(end + 1) = hTan;  % Append the graphics handle to legend's plot children

如果在 PlotChildren 属性中添加或删除对象,则图例会自动更新。

1 确实:数字。你可以将具有 DisplayName 属性的任何图形的子项添加到图中的任何图例,例如,从不同的子图。这是因为图例本身基本上是一个轴对象。

在 MATLAB R2016b 上测试