自定义传奇Matlab 2014b

时间:2015-01-22 04:07:34

标签: matlab legend matlab-figure matlab-hg2

我有一个数字,其中我使用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');

例如,我想从左边的图像更改为右边的图像:

enter image description here

2 个答案:

答案 0 :(得分:3)

只需使用NaN代替[]

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

enter image description here

我对其工作原理的解释:使用NaN生成一个行对象h1(大小为1x1)。此行在图中不可见,因为NaN值未在图表中显示,但您可以将其用于图例。相反,使用[]会产生一个空的h1(大小为0x1),当用作legend的第一个输入时,它不会产生预期的效果。

答案 1 :(得分: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;

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

修改:实际上可以使用nan代替[],例如:

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

但是这种方法不适用于rectangles命令。