15

我跑

loglog(x,y);
legend('First script');

从第一个脚本。那么,hold on;。我运行了类似的第二个脚本。我正确地看到了两张图,但只有最初的图例。我想从不同的脚本中增加图例。

如何从单个脚本添加到图例?

4

5 回答 5

21

另一种可能的方法是“DisplayName”:

hold all
for ind=1:3
x=[0:0.1:10];
plot(x, sin(x)+ind, 'DisplayName',['sin + ' num2str(ind)]);
end
legend(gca,'show')

只需在从任何位置绘制到任何轴时使用此属性:)

还有更多可能的事情,比如动态传奇!

有关更多信息,请参阅:来自未记录的 matlab 的动态图例

编辑

您必须在每次运行脚本后更新图例。您可以使用动态图例或仅通过 legend('off'); 图例('显示')

于 2013-10-17T08:21:56.283 回答
5

处理此问题的最简单方法是在创建图例时将句柄保存到图例,然后准备使用包含另一个系列的新图例来更新情节,删除图例并创建一个新图例:

legendStrings = {'First script'};
h_legend = legend(legendStrings{:});
% ... computations, hold on and additional plot on axis
delete(h_legend);
legendStrings{end+1} = 'Second script';
h_legend = legend(legendStrings{:});
% rinse and repeat...

通常对于图形对象,例如文本框,我会说只是通过句柄重用对象(不要delete)。但是,如果您更新图例而不是替换它,您需要担心的不仅仅是字符串。zroth 引用的MathWorks 解决方案实际上似乎解决了这种方法!

作为创建新的替代方案,您还可以根据 Eugenio 评论中的答案建议delete打开和关闭图例。legend('off'); legend('show');

于 2013-10-17T05:11:02.460 回答
2

最简单的方法是:

hold all;
p1=plot(1:10,1:10);  
legend(p1,'1');  % in this way plot(x,y) is saved as variable p1 with name '1'   
p2=plot(1:10,11:20); % different data set

legend(p2,'2');  
legend(gca,'off');    
legend('show');

这是几种方法的连接,它非常简单,可以在任何地方使用。

于 2015-04-29T12:19:00.427 回答
1

我有一个类似的问题:我先绘制了三组实验数据,然后进入我的参数估计来模拟函数,并且每次都想绘制模型数据,保留实验数据但删除之前运行的模型数据. 我希望传奇能够证明这一点。我能够结合来自不同问题的解决方案来做到这一点。

初始命令(我的主要命令的顶部)

close all将确保您的情节每次都重新开始

第一个情节(在我的主要情节中)

plot(points,expdata1,'ro','DisplayName','Experimental, L= 0.1 m'); hold on
plot(points,expdata2,'bo','DisplayName','Experimental, L= 0.2 m'); 
plot(points,expdata3,'go','DisplayName','Experimental, L= 0.3 m');   
legend('-DynamicLegend','Location','Best')
drawnow
h_old=plot(0,250);

drawnow强制立即绘制情节,并且h_old只是我稍后使用的“占位符”。我选择 0,250 是因为它在数据范围内(否则会弄乱轴)

第二个图(在被调用函数中)

h(1)=plot(points,modeldata1,'r-','DisplayName','Model Data, L= 0.1 m');
h(2)=plot(points,modeldata2,'b-','DisplayName','Model Data, L= 0.2 m'); 
h(3)=plot(points,modeldata3,'g-','DisplayName','Model Data, L= 0.3 m');
delete(h_old);
h_old = h;
drawnow

我删除h_old并用我创建的新图覆盖它。这样,在第二次迭代中,将绘制第二次迭代的图,删除第一次的图,在这些操作之后,我得到它来显示图(再次drawnow)。

于 2014-12-15T11:11:35.753 回答
0
plot(x,y);
legend('y');

hold on;
plot(x,z);
hold off;

% Now add a new item to the legend

h = legend();
newleg = h.String;
newleg{end+1} = 'z';
legend(newleg);
于 2015-03-12T18:02:38.033 回答