1

我有一个图,其中我使用hold on.

当我想创建我的 Legend 时,我无法访问我的人物的所有句柄。

有没有办法通过定义情节的尖端和描述的字符串来创建一个独立的图例?

例如,我希望能够做到:

figure;
plot(0:0.1:pi, sin(0:0.1:pi), 'b-');
customLegend('r.', 'red dots');

在以前的版本中,可以使用以下方法创建虚拟绘图:

h1 = plot([], [], 'r.');
legend(h1, 'red dots');

例如我想从左边的图像变成右边的图像:

在此处输入图像描述

4

2 回答 2

3

只需使用NaN而不是[]

figure;
plot([1:20], [-9:10], 'b-');
hold on
h1 = plot(NaN, NaN, 'r.');
legend(h1, 'red dots');

在此处输入图像描述

我对其工作原理的解释: usingNaN生成一个线对象h1(大小 1x1)。该线在图中不可见,因为NaN图表中未显示值,但您可以将其用于图例。相反, using[]会产生一个空的h1(大小为 0x1),当用作legend.

于 2015-01-22T23:35:41.437 回答
0

所以我得到了这个不是很优雅的解决方案(在窗口外绘图,保存句柄并将窗口大小调整为原始轴)。

figure;
plot(0:0.1:pi, sin(0:0.1:pi), 'b-');

hold on;
a = axis; 
h1 = plot(min(a) - 10, min(a),  'r.'); % plots outside of the current figure
axis(a);
legend(h1, 'red dots');
hold off;

如果有人有更优雅的解决方案,我很乐意接受:)

编辑:实际上可以使用 anan而不是[]like:

h1 = plot(nan, nan, 'r.');
h2 = plot(nan, nan, 'b+');
legend([h1, h2], 'red dots', 'blue cross');

但是,此方法不适用于 rectangles 命令。

于 2015-01-22T05:15:40.287 回答