Подтвердить что ты не робот

Добавить пользовательскую легенду без какого-либо отношения к графику

Я хочу вставить легенду, которая не связана с графиком:

figure;
hold on;
plot(0,0,'or');
plot(0,0,'ob');
plot(0,0,'ok');
leg = legend('red','blue','black');

Теперь я хочу добавить его к другому рисунку:

figure;
t=linspace(0,10,100);
plot(t,sin(t));
%% ADD THE LEGEND OF PLOT ABOVE 
4b9b3361

Ответ 1

Вот как я решил эту проблему в прошлом:

figure
t=linspace(0,10,100);
plot(t,sin(t));
hold on;

h = zeros(3, 1);
h(1) = plot(NaN,NaN,'or');
h(2) = plot(NaN,NaN,'ob');
h(3) = plot(NaN,NaN,'ok');
legend(h, 'red','blue','black');

Это построит дополнительные точки, но поскольку координаты находятся в NaN, они не будут видны на самом участке:

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

РЕДАКТИРОВАТЬ 26/10/2016:. Мой оригинальный ответ приводит к тому, что в 2016b записаны заголовки легенд. Обновленный код выше работает, но нижеприведенный ответ имеет значение только до 2016b:

figure
t=linspace(0,10,100);
plot(t,sin(t));
hold on;

h = zeros(3, 1);
h(1) = plot(0,0,'or', 'visible', 'off');
h(2) = plot(0,0,'ob', 'visible', 'off');
h(3) = plot(0,0,'ok', 'visible', 'off');
legend(h, 'red','blue','black');

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

Вы также можете использовать copyobj для копирования графических элементов с одного рисунка на другой, если у вас много элементов, а затем используйте set(x, 'visible', 'off'), чтобы скрыть их, прежде чем показывать легенду, но это зависит от того, что ваше окончательное приложение.

Ответ 2

Ваш вопрос немного неясен. Тем не менее, первое, что я придумал, это читать text в Matlab.

Вы можете использовать функцию text, чтобы добавить текст к фигуре Matlab. Он использует

>> text(x, y, str);

где x и y - это координаты на рисунке, где вы хотите добавить текст str. Вы можете использовать опцию Color text для цветов и TeX для рисования линий или даже _. Я стал очень креативным с графиками, используя текст.

Вот быстрый и грязный пример эмуляции legend с text

x = 0:pi/20:2*pi;
y = sin(x);
plot(x,y)
axis tight

legend('sin(x)');

text(5.7, 0.75, 'sin(x)');
text(5.1, 0.78, '_____', 'Color', 'blue');

который производит

                   

В этом конкретном случае вы можете использовать определенную команду (отмеченную @Hoki в комментариях).

ht = text(5, 0.5, {'{\color{red} o } Red', '{\color{blue} o } Blue', '{\color{black} o } Black'}, 'EdgeColor', 'k');

для создания

                   

возвращая дескриптор объекта text, становится тривиально копировать его на новую фигуру, copyobj(ht, newfig). [1]