Matlab-как сделать пользовательскую легенду
У меня есть следующее изображение:
и я хотел бы сделать легенду для него. В принципе, я хочу сделать легенду для каждого типа прямоугольник. В поле легенда я хочу отметить каждую цветовую линию в соответствии с типом тела, которое она отмечает:
- зеленая линия : голова
- желтая линия : туловище
- фиолетовая линия: правая рука
- голубая линия: левая рука
- красная линия : слева нога!--9-->
- синяя линия : правая нога
Это в основном обычай, потому что у меня больше прямоугольников каждого типа. Как я могу сделать пользовательскую легенду и прикрепить ее к фигуре, которая рисует эту картину?
4 ответов
самый простой способ, который я могу придумать, - это сначала построить один прямоугольник каждого типа и построить легенду только для уникальных прямоугольников. Вот так:
figure;
hold on;
% unique rectangles
plot(rand(1, 10), 'b');
plot(rand(1, 10), 'g');
% the rest
plot(rand(1, 10), 'b');
plot(rand(1, 10), 'g');
% use normal legend with only as many entries as there are unique rectangles
legend('Blue', 'Green');
у вас будет много линий одного цвета, но легенда только для уникальных цветов.
есть 2 способа, которыми вы могли бы это сделать. Вы можете создать свои квадраты, а затем назначить их hggroup. Таким образом, у вас нет нескольких элементов для каждого цвета. Что-то вроде этого:--3-->
hold on
for ii = 1:4
hb(ii) = plot(rand(1,2), rand(1,2),'color','r');
end
hg = hggroup;
set(hb,'Parent',hg)
set(hg,'Displayname','Legs')
legend(hg)
или вы можете создавать фиктивные объекты, например:
hold on
for ii = 1:4
hb(ii) = plot(rand(1,2), rand(1,2),'color','r');
end
p = plot([],[],'r');
legend(p,'Legs')
первый немного более элегантный.
Я хотел бы добавить к ответу dvreed77 на использование hggroup, что для использования чистой легенды мне также нужно установить " IconDisplayStyle "(Matlab R2014a), такой, что:
%4 kinds of lines:
n_areas = 4;
n_lines = 10;
%use built-in color map
cmap = hsv(n_areas);
%plot lines and generate handle vectors
h_fig = figure;
hold on
h_lines = zeros(1,n_lines);
for l = 1:n_areas
for k = 1:n_lines
h_lines(k) = plot(rand(1,2), rand(1,2),'Color',cmap(l,:));
end
%Create hggroup and set 'icondistplaystyle' to on for legend
curPlotSet = hggroup;
set(h_lines,'Parent',curPlotSet);
set(get(get(curPlotSet,'Annotation'),'LegendInformation'),...
'IconDisplayStyle','on');
end
%Now manually define legend label
legend('heads','legs','hands','feet')
просто нарисуйте точки легенды вне сюжета:
figure;
plot(-1,-1,'gs',-1,-1,'b^',-1,-1,'ro');
legend('x1','x2','x3','Location','NorthWest');
xlim([0,1]); ylim([0,1]);