Matlab 添加与图形没有任何关系的自定义图例

Matlab 添加与图形没有任何关系的自定义图例,matlab,matlab-figure,legend,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 你的问题有点不清楚。然而,我在阅读时想到的第一件事是Matlab中的函

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

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 

你的问题有点不清楚。然而,我在阅读时想到的第一件事是Matlab中的函数

您可以使用该函数向Matlab图形中添加文本

>> text(x, y, str);
其中
x
y
是图中要添加文本
str
的坐标。您可以使用for colors和TeX选项来绘制线条,甚至
\uuu
。我对使用文本的情节很有创意

下面是一个快速而肮脏的使用

产生

对于这种特定的情况,您可以使用特定的命令(注释中用@表示)

产生


通过检索对象的句柄,将其复制到一个新图形就变得很简单了。[]

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

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
处,因此它们在绘图本身上不可见:

编辑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
将图形元素从一个图形复制到另一个图形,然后在显示图例之前使用
设置(x,'visible','off')
将其隐藏,但这取决于你的最终申请是什么。

这是一个简单的例子,说明我有一件更大的事情,因此你的建议与此无关,必须有一种方法来做到这一点,因为不清楚你想要实现什么。你能提供更多的信息吗?如果绘图中没有相关数据,为什么需要图例。我想要实现的正是我所写的,使用带有第一个图形图例的框,并将其显示在第二个图形上。2 hacky选项:(1)添加空
lineserie
(或任何空图形对象)在
轴中
,以便有足够的空间填充图例。(2,在我看来更好)制作您自己的
图例
对象(毕竟它只是一个特殊的
对象),然后您可以在图形中自由移动/复制/修改。有关如何执行此操作的示例可以在此处找到:。您甚至可以对绘图数据使用
NaN
而不是
0
。这样,您甚至不必触摸
visible
属性,也不会显示任何内容(图例仍将接受数据序列作为有效条目)。但是,
文本
不提供图例提供的颜色和格式。您可以使用
文本
颜色
选项来绘制线条,甚至可以使用
。我对使用
text
的绘图非常有创意。听起来很有趣,你能举一个
TeX
Color
语法在
text
对象中的小例子吗?很好。还可以在一个文本区域中部分修改颜色(使用TeX颜色标记),并在一个文本对象中具有多行文本。因此,您可以一次性定义图例!。试试这个:
ht=text(5,0,{\color{red}o}red(serie1)',{\color{blue}o}blue(serie2)',{\color{black}o}black(serie3)},'EdgeColor','k')。这样你就不必定义多个
text
对象。我绝对不介意。我希望你能重现这个例子;-)。它与你的答案没有太大的不同,因此不值得单独回答,但它提供了额外的信息/选项来构建一个漂亮的传奇,因此值得一提。我也是,我错过了用文字画漂亮线条的方法。此外,如果您的行符号不同,您可以考虑使用固定大小的字体,以便保持良好的对齐(它可能会变得相当难看)。最后一个建议是,我将检索创建的文本对象的句柄,这样在另一个图中使用相同的对象就变得很简单:
copyobj(ht,newfig)
。如上所述,您可以使用NaN,然后就不需要使用可见对象handle@vindarmagnus哎哟,是的,你说得对!正如jarhead和Hoki在comments.Nice中建议的那样,我已经更新了我的答案,使用
NaN
坐标,而不是看不见的图。(无需预先分配矩阵,因此可以消除
h=0(3,1)
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');
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');