我想绘制 66 个数据集并展示它们的图例。不幸的是,根据 MathWorks 支持团队的说法,MATLAB 图例默认限制为 50 个条目。
我尝试了他们建议的解决方法,包括在图中制作另一个轴,复制以前的数据,然后隐藏新轴,但我无法让它工作(新轴仅显示 16 个中的 1 个附加变量左),所以我被卡住了。
还有其他方法可以显示超过 50 个图例条目吗?
我想绘制 66 个数据集并展示它们的图例。不幸的是,根据 MathWorks 支持团队的说法,MATLAB 图例默认限制为 50 个条目。
我尝试了他们建议的解决方法,包括在图中制作另一个轴,复制以前的数据,然后隐藏新轴,但我无法让它工作(新轴仅显示 16 个中的 1 个附加变量左),所以我被卡住了。
还有其他方法可以显示超过 50 个图例条目吗?
我自己遇到了这个问题,并发现了一个可以提供帮助的未记录特性—— '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
虽然我同意这些可能太多的传奇条目有用,但我相信一个人应该有自由自在地开枪打死自己。
正如 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 );
输出:
Eric Sargent (TMW Staff)建议的解决方案是将绘图句柄传递给命令:legend
p = plot(magic(100));
legend(p);
请注意,在这种情况下,坐标轴不是由 确定的gca
,而是使用ancestor(p, 'axes')
(因此在调用时无需指定坐标轴句柄legend
)。此外,指定轴句柄会使此解决方案停止工作!