Matlab рисует как фильм с легендой

У меня есть вопрос относительно легенды для фильмов. Это мой код:

fig = figure();
for i = 1: 70000
plot(signal1)
hold on;
plot([i,i],[-5,5])
plot(signal2,'r')
hold off;
title('\fontsize{14} my data');
legend('signal1','signal2');
axis tight;
f(i) = getframe(fig); 
end

Легенда показывает те же цвета для первых двух вещей, которые я рисую. если я рисую больше, это работает для других сюжетов. Есть ли какой-то трюк, которого я не знаю?


person ele    schedule 22.06.2015    source источник


Ответы (1)


Строки, определенные в команде legend, назначаются в порядке создания графиков. Это означает, что ваша первая строка 'signal1' назначается графику для signal1, а вторая строка 'signal2' назначается вертикальной линии.

У вас есть две возможности решить эту проблему.

  1. Выполните plot для вертикальной линии после графика для двух сигналов.
  2. Используйте дескрипторы графиков, чтобы напрямую назначать легенды.

Вот пример изменения порядка:

plot(signal1)
hold on;
plot(signal2,'r')
plot([i,i],[-5,5],'k')
hold off;
legend('signal1','signal2');

Вот пример, в котором используются дескрипторы (sp1 и sp2):

sp1 = plot(signal1)
hold on;
plot([i,i],[-5,5],'k')
sp2 = plot(signal2,'r')
hold off;
title('\fontsize{14} my data');
legend([sp1,sp2],'signal1','signal2');
person Matt    schedule 22.06.2015
comment
Спасибо. Всего одна строчка в другом месте и все работает :) - person ele; 22.06.2015
comment
Да все верно. Если вы хотите быть независимым от должности, используйте второй подход. Это особенно рекомендуется, если кривых на графике больше, чем элементов легенды. - person Matt; 22.06.2015