我跑
loglog(x,y);
legend('First script');
来自第一个脚本。
然后,hold on;
。
我运行类似的第二个脚本。
我正确地看到了两张图,但只看到了最初的图例。
我想从不同的脚本中增加图例。
如何从单个脚本添加到图例?
答案 0 :(得分:18)
另一种可能的方法是将其称为'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')
从任何地方到任何轴绘图时都可以使用此属性:)
还有更多可能的东西,比如动态传奇!
有关详细信息,请参阅:dynamic legend from undocumented matlab
修改强>
每次运行脚本后都必须更新图例。您可以使用动态图例或仅通过图例('关闭')执行此操作;图例( '节目')
答案 1 :(得分: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
)。但是,如果您更新图例而不是替换,那么您不仅要担心字符串。 MathWorks solution referenced by zroth实际上似乎解决了这种方法!
作为delete
的替代方案并创建新内容,您还可以使用legend('off'); legend('show');
打开和关闭图例作为Eugenio评论中的答案。
答案 2 :(得分: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');
这是几种方法的联系,非常简单,可以在任何地方使用。
答案 3 :(得分: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
)。
答案 4 :(得分: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);