Добавить пользовательскую легенду без какого-либо отношения к графику
Я хочу вставить легенду, которая не связана с графиком:
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
Ответы
Ответ 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]