添加与图表无任何关系的自定义图例

时间:2015-11-02 09:16:49

标签: matlab matlab-figure legend

我希望插入一个与图表无关的图例:

figure;
hold on;
plot(0,0,'or');
plot(0,0,'ob');
plot(0,0,'ok');
leg = legend('red','blue','black');

现在我希望将其添加到另一个数字中:

figure;
t=linspace(0,10,100);
plot(t,sin(t));
%% ADD THE LEGEND OF PLOT ABOVE 

2 个答案:

答案 0 :(得分:30)

这就是我过去解决这个问题的方法:

figure
t=linspace(0,10,100);
plot(t,sin(t));
hold on;

h = zeros(3, 1);
h(1) = plot(NaN,NaN,'or');
h(2) = plot(NaN,NaN,'ob');
h(3) = plot(NaN,NaN,'ok');
legend(h, 'red','blue','black');

这将绘制其他点,但因为坐标位于NaN,所以它们在图表上不可见:

enter image description here

编辑2016年10月26日:我的原始答案导致2016b中的灰色图例条目。上面的更新代码有效,但下面的答案仅在2016b之前相关:

figure
t=linspace(0,10,100);
plot(t,sin(t));
hold on;

h = zeros(3, 1);
h(1) = plot(0,0,'or', 'visible', 'off');
h(2) = plot(0,0,'ob', 'visible', 'off');
h(3) = plot(0,0,'ok', 'visible', 'off');
legend(h, 'red','blue','black');

这将绘制附加点,但它们在图表本身上不可见。

如果您有很多元素,也可以使用copyobj将图形元素从一个图形复制到另一个图形,然后在显示图例之前使用set(x, 'visible', 'off')隐藏它们,但这取决于您的图形最终申请是。

答案 1 :(得分:3)

你的问题有点不清楚。但是,我在阅读时首先想到的是Matlab中的text函数。

您可以使用text功能将文本添加到Matlab图形中。它的用途是

>> text(x, y, str);

其中xy是图中要添加文字str的坐标。您可以使用Color text选项获取颜色,使用TeX绘制直线甚至_。我对使用文字的情节非常有创意。

以下是使用legend

模拟text的快速而肮脏的示例
x = 0:pi/20:2*pi;
y = sin(x);
plot(x,y)
axis tight

legend('sin(x)');

text(5.7, 0.75, 'sin(x)');
text(5.1, 0.78, '_____', 'Color', 'blue');

产生

<code>text</code> example

对于这种特定情况,您可以使用特定命令(在评论中注明@ Hoki)。

ht = text(5, 0.5, {'{\color{red} o } Red', '{\color{blue} o } Blue', '{\color{black} o } Black'}, 'EdgeColor', 'k');

生产

<code>text</code> example

通过检索text对象的句柄,将其复制到新的数字copyobj(ht, newfig)变得微不足道。 [1]