How do I copy over only one legend entry from each plot using copyobj()?

23 次查看(过去 30 天)
I have three separate figure files that consist of multiple plots, but with only one legend entry each. This is because each figure consists of multiple lines of the same color.
In order to overlay each of these figures into a single figure, I input:
% Load saved figures
hgload('design_1.fig');
hgload('design_2.fig');
hgload('baseline.fig');
% Identify figures
fig1 = findobj(1,'Type','Axes');
leg1 = legend(fig1,'Design 1');
fig2 = findobj(2,'Type','Line');
leg2 = legend(fig2,'Design 2');
fig3 = findobj(3,'Type','Line');
leg3 = legend(fig3,'Baseline');
% Combine figures
copyobj(fig2,fig1);
copyobj(fig3,fig1);
However, when I do this, the legend has many extraneous entries corresponding to the lines that should not be labeled. I want my legend to only have 3 entries, exactly one from each figure. Any advice?

采纳的回答

Neil Guertin
Neil Guertin 2018-1-5
When creating a legend, you can specify exactly the objects you want to appear in it. In this case, you will want to recreate the legend with just one line from each series.
% open figures;
fig1 = openfig('design_1.fig');
fig2 = openfig('design_2.fig');
fig3 = openfig('baseline.fig');
% get handles to axes and lines
ax = findobj(fig1,'Type','Axes');
p1 = findall(fig1,'Type','Line');
p2 = findall(fig2,'Type','Line');
p3 = findall(fig3,'Type','Line');
% copy lines to same figure
p2_new = copyobj(p2,ax);
p3_new = copyobj(p3,ax);
% recreate legend
legend(ax,[p1(1),p2_new(1),p3_new(1)])
  1 个评论
Tim Chau
Tim Chau 2018-1-6
I found a workaround by employing a dummy figure, but this is much more elegant. I figured (no pun intended) that there was a correct way to do this; thank you so much for your answer!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Specifying Target for Graphics Output 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by