2015-10-01 4 views
0

Я пытаюсь получить легенду для обозначения нескольких графиков, сгенерированных внутри цикла for. Я прочитал несколько каналов по этой теме. Я не уверен, почему все они кажутся такими непонятными, но я до сих пор не могу понять, как заставить его работать.Создание легенды внутри цикла

x=0:.2:13; 
y=zeros(4,length(x)); 
slope=zeros(1,4); 
strings=zeros(1,4); 
hold on 
grid on 

for cnt=1:4 

slope(cnt)=-omega(cnt)/trq(cnt); 

y(cnt,:)=x*slope(cnt)+omega(cnt); 

plot(x,y(cnt,:)) 

str=sprintf('%f volts',V(cnt)); 
legend(str) 
end 

axis([0 .05 0 300]) 

Я попытался переместить команду легенды за пределы цикла, и я попытался сделать массив строк внутри цикла. Любые предложения приветствуются.

ответ

0

Функция legend ожидает набор строк, тогда как в настоящее время вы передаете только одно строковое значение для каждого вызова. Таким образом, вы должны скопировать строки, которые хотите в качестве легенд в цикле, а затем вызвать legend вне цикла с этой коллекцией.

str = cell(1,4); %initialize a cell array to hold the legend strings 

for 
    . 
    . 
    . 
    str{cnt}=sprintf('%f volts',V(cnt)); %insert text into the appropriate cells 
end 
legend(str) 
0

Проблема с созданием легенды из строк является то, что если включить легенду выключить и затем вы снова включите его снова, пользовательская строка исчезает. Поэтому я предлагаю установить свойство «DisplayName» для графических объектов:

x=0:.2:13; 
y=zeros(4,length(x)); 
slope=zeros(1,4); 
hold on 


for cnt=1:4 
slope(cnt)=-omega(cnt)/trq(cnt); 
y(cnt,:)=x*slope(cnt)+omega(cnt); 

plot(x,y(cnt,:),'DisplayName',sprintf('%f volts',V(cnt))) 

end 

%# finish the figure 
grid on 
axis([0 .05 0 300]) 
legend('show') 
Смежные вопросы