Пользовательская легенда Matlab 2014b

У меня есть рисунок, на котором у меня было несколько графиков через разные функции с использованием hold on.

Когда я хочу создать свою Легенду, у меня нет доступа ко всем ручкам моих фигурок.

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

Например, я хотел бы иметь возможность:

figure;
plot(0:0.1:pi, sin(0:0.1:pi), 'b-');
customLegend('r.', 'red dots');

В предыдущей версии можно было создать виртуальный участок, используя:

h1 = plot([], [], 'r.');
legend(h1, 'red dots');

Например, я хочу изменить изображение слева на изображение справа:

введите здесь описание изображения


person R.Falque    schedule 22.01.2015    source источник
comment
Я не уверен, что вы спрашиваете, даже с вашим решением. Вам не нужны дескрипторы, если вы собираетесь использовать все линии. Они просто отображаются в том порядке, в котором были введены.   -  person Eypros    schedule 22.01.2015
comment
Я хочу перезаписать легенду. Ручки дают вам контроль над тем, что вы хотите отобразить. Моя проблема в том, что я рисую несколько точек несколькими цветами. В легенде мне просто нужна одна метка для каждого цвета.   -  person R.Falque    schedule 22.01.2015
comment
Чем вы хотите его перезаписать (т.е. заменить)? Предоставленные вами легенды не дают никаких отличий от легенды по умолчанию.   -  person Eypros    schedule 22.01.2015
comment
Я редактирую свой первый ответ;). Я просто хочу иметь возможность определить легенду так, как я хочу. Приведенный пример - это простое представление того, что я на самом деле хочу сделать (но он отличается от исходного).   -  person R.Falque    schedule 22.01.2015
comment
Нет, вы не используете другую легенду (по крайней мере, я ее не понимаю). Типичной легендой будет legend('red dots', 'blue lines'), которая создает двухстрочную легенду с введенной вами строкой, соответствующей линиям в том порядке, в котором они были нанесены. Что вы делаете по-другому в вашем примере?   -  person Eypros    schedule 22.01.2015
comment
Вы не поняли, проблема не в изменении строки, а в представлении сюжета. Подскажите, если не понятно добавлю фото ;)   -  person R.Falque    schedule 22.01.2015
comment
Давайте продолжим обсуждение в чате.   -  person Eypros    schedule 22.01.2015
comment
Этот ответ может быть связан с вашей проблемой.   -  person Dev-iL    schedule 23.01.2015
comment
Как построить этот рис? Ссылка (tex.stackexchange. com/questions/225128/)?   -  person xiaojidan    schedule 27.01.2015


Ответы (2)


Просто используйте NaN вместо []:

figure;
plot([1:20], [-9:10], 'b-');
hold on
h1 = plot(NaN, NaN, 'r.');
legend(h1, 'red dots');

введите здесь описание изображения

Моя интерпретация того, почему это работает: использование NaN генерирует линейный объект h1 (размер 1x1). Эта линия не видна на рисунке, потому что значения NaN не отображаются на графиках, но вы можете использовать ее для легенды. Наоборот, использование [] создает пустой h1 (размер 0x1), который не дает желаемого эффекта при использовании в качестве первого входа legend.

person Luis Mendo    schedule 22.01.2015

Итак, я получил это решение, которое не очень элегантно (рисунок за пределами окна, сохранение дескриптора и изменение размера окна до исходной оси).

figure;
plot(0:0.1:pi, sin(0:0.1:pi), 'b-');

hold on;
a = axis; 
h1 = plot(min(a) - 10, min(a),  'r.'); % plots outside of the current figure
axis(a);
legend(h1, 'red dots');
hold off;

Если у кого-то есть более изящное решение, с удовольствием возьму :)

Изменить: на самом деле можно использовать nan вместо [], например:

h1 = plot(nan, nan, 'r.');
h2 = plot(nan, nan, 'b+');
legend([h1, h2], 'red dots', 'blue cross');

Однако этот метод не работает с командой прямоугольников.

person R.Falque    schedule 22.01.2015