2016-08-11 2 views
1

Я хочу иметь несколько легенд на одном участке. Это решение отлично работает до версии 2014b. Я пытаюсь понять, как сделать это элегантно с помощью ручек, но пока не получилось. Любые идеи приветствуются.Matlab несколько легенд на одном участке 2014b

Пример в 2013b:

x = 1:50; 
y1 = sin(x/2); 
y2 = cos(x/2); 

f = figure(1); 
pl(1) = plot(x,y1,'g');hold on; 
pl(2) = plot(x,y2,'r'); 

h1 = legend('eg1','eg2');  
set(h1,'Location','NorthEast') 

tmp = copyobj(h1,f); 

h2 = legend(pl,'sin','line');  
set(h2,'Location','SouthWest') 

я получаю что-то с помощью

ax = gca; 
tmp = copyobj([h1,ax],f); 

, но когда я снова установить легенду, предыдущая легенда уходит под сюжет.

Спасибо!

+0

Я вижу следующее сообщение об ошибке при выполнении TMP = copyobj (h1, е); Ошибка при использовании matlab.graphics.illustration.Legend/connectCopyToTree (строка 5) Легенда должна быть скопирована со связанными с ней осями. Используйте векторный ввод с COPYOBJ, чтобы скопировать легенду и оси вместе. –

ответ

4

Matlab по умолчанию допускает только одну легенду для каждой оси, поэтому вам нужно будет создать поддельную/пустую вторичную ось, чтобы получить вашу легенду. Mathworks help имеет хороший пример этого

кодекса, чтобы произвести приведенную ниже таблицу здесь

x= 0:0.01:2*pi; 
y = sin(x); 
hl1 = line(x, y,'Color','k','LineStyle','--'); 
ax1 = gca; 
set(ax1,'xlim',[0, 7],'ylim',[-1, 
1],'XColor','k','YColor','k'); 
legend_handle1 = legend(' sin'); 
ax2 = axes('Position',get(ax1,'Position'),... 
      'xlim',[0, 7],'ylim',[-1,1],... 
      'Visible','off','Color','none'); 
hl2 = line(pi/2, 1,'Color','r','Marker', 'o','Parent',ax2); 
hl3 = line(pi, 0,'Color','g','Marker', 'x','Parent',ax2); 
legend_handle2 = legend('peak', 'zero'); 
set(legend_handle2, 'Color', 'none'); 

enter image description here

Смежные вопросы