0

我想绘制 66 个数据集并展示它们的图例。不幸的是,根据 MathWorks 支持团队的说法,MATLAB 图例默认限制为 50 个条目。

我尝试了他们建议的解决方法,包括在图中制作另一个轴,复制以前的数据,然后隐藏新轴,但我无法让它工作(新轴仅显示 16 个中的 1 个附加变量左),所以我被卡住了。

还有其他方法可以显示超过 50 个图例条目吗?

4

3 回答 3

3

我自己遇到了这个问题,并发现了一个可以提供帮助的未记录特性—— 'LimitMaxLegendEntries'Legend ( 'matlab.graphics.illustration.Legend') 对象的属性。这是一个例子:

hF = figure(); 
hAx = axes(hF);
plot(hAx, magic(100));
hL = legend(hAx, '-DynamicLegend');
set(hL, 'LimitMaxLegendEntries', false, 'NumColumns', 3);

结果是:

在此处输入图像描述

在 R2020a 上测试。

PS
虽然我同意这些可能太多的传奇条目有用,但我相信一个人应该有自由自在地开枪打死自己。

于 2020-12-24T09:04:07.260 回答
2

正如 Cris 的评论所暗示的那样,您的情节可能会非常不清楚 - 如果您需要 50 多个图例条目,那么您就有 50 多种不同的线条样式,从可用性的角度来看,这非常疯狂。

gridLegend 除此之外,您可以使用FileExchange 提交来实现不受限制的图例。

% Plot some dummy data, 60 series with various markers / lines
ms = {'*','+','.','d','s','o'};
ls = {'--','-',':','-.'};
x = linspace( 0, 10, 100 ).';
figure(); hold on;
for ii = 1:60;
    y = sin(x+ii) + ii + rand(100,1)/2;
    p(ii) = plot( x, y, ms{randi(6)}, 'linestyle', ls{randi(4)} );
end
% Call the legend
gridLegend( p );

输出:

阴谋

于 2019-10-08T08:39:38.273 回答
1

Eric Sargent (TMW Staff)建议的解决方案是将绘图句柄传递给命令:legend

p = plot(magic(100));
legend(p);

请注意,在这种情况下,坐标轴不是由 确定的gca,而是使用ancestor(p, 'axes')(因此在调用时无需指定坐标轴句柄legend)。此外,指定轴句柄会使此解决方案停止工作

于 2020-12-24T09:33:19.177 回答