Matlab-как сделать пользовательскую легенду

У меня есть следующее изображение:

enter image description here

и я хотел бы сделать легенду для него. В принципе, я хочу сделать легенду для каждого типа прямоугольник. В поле легенда я хочу отметить каждую цветовую линию в соответствии с типом тела, которое она отмечает:

  • зеленая линия : голова
  • желтая линия : туловище
  • фиолетовая линия: правая рука
  • голубая линия: левая рука
  • красная линия : слева нога!--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]);