2016-05-26 5 views
2

Я пытаюсь написать код, чтобы настроить фигуры и легенды, чтобы они выглядели красиво. Я сделал код, черчение фигурыMatLab: по желанию включить легенду

figure(1) 
hold on 
plot(x1, y1, 'DisplayName', name1) 
plot(x2, y2, 'DisplayName', name2) 
plot(x3, y3, 'DisplayName', name3) 

Теперь мне нужен другой скрипт, который должен превратить легенду, только если name1name2 и name3 в исходных фигурах были на самом деле установить в какое-то не по умолчанию значения, то есть не '', в противном случае Мне вообще не нужна легенда.

function optionallegend(figure) 
if ???? 
    legend('show'); 
end 

Могу ли я это сделать?

+0

Это значение по умолчанию i.e. Я не задал для него никакого конкретного имени. Я объясню это и на главном посту. – Alex

ответ

3

Вы можете использовать findobj, чтобы найти все объекты сюжета в ваших текущих осях, у которых есть свойство DisplayName, и определили его как нечто отличное от ''. findobj возвращает массив ручек, который затем можно передать в legend. Если никакие сюжеты не соответствуют этим критериям, никакая легенда не будет показана.

plots = findobj(gca, '-not', 'DisplayName', '', '-property', 'DisplayName'); 

if ~isempty(plots); legend(plots); end 

И как пример

figure; 
hax = axes(); 
hold(hax, 'on') 

plot(rand(5,1), 'DisplayName', 'Plot #1'); 
plot(rand(5,1)) 
plot(rand(5,1), 'DisplayName', 'Plot #3'); 

legend(findobj(hax, '-not', 'DisplayName', '', '-property', 'DisplayName')); 

enter image description here

Если вместо этого вы хотите, чтобы просто построить легенду только для определенных участков, вы можете явно хранить сюжет обрабатывает и передать тех legend непосредственно ,

hplot1 = plot(rand(5,1), 'DisplayName', 'Plot #1'); 
hplot2 = plot(rand(5,1), 'DisplayName', 'Plot #2'); 

legend([hplot1, hplot2]) 
+0

Можете ли вы также пропустить элементы в легенде этим методом? – Alex

+0

@Alex Вы можете передать любой массив дескрипторов в 'legend()', чтобы вы могли передавать только те, которые хотите построить. – Suever

+0

@Alex Я добавил небольшую демонстрацию в конце, показывающую, как это сделать – Suever

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