2012-10-15 16 views
6

nasıl aşağıdaki resmi var:Matlab - Özel bir efsane

enter image description here

Ve bunun için bir açıklama yapmak istiyorum. Temel olarak, her bir dikdörtgen türü için bir efsane yapmak istiyorum.

    yeşil hat
  • : Kafa sarı çizgi
  • :
  • mor çizgiyi karın-: sağ
  • kol efsane kutusunda, bunun işaretleri vücudun türüne göre her renk hattını işaretlemek istediğiniz camgöbeği satır: sol kol
  • kırmızı çizgi: sol bacak
  • mavi çizgi: sağ bacak

Bu temelde özeldir, çünkü her türden daha fazla dikdörtgenler var. Özel bir efsaneyi nasıl yapabilirim ve bu resmi çeken şekle ekleyebilir miyim?

cevap

2

Düşünebildiğim en basit yol, ilk olarak her türden bir dikdörtgeni çizmek ve yalnızca benzersiz dikdörtgenler için bir gösterge oluşturmaktır. Öyleyse:

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'); 

Aynı renkteki birçok satıra sahip olacaksınız, ancak yalnızca benzersiz renkler için bir gösterge.

7

Bu konuda gidebileceğiniz 2 yol vardır. Karelerinizi oluşturabilir ve ardından bir hggroup'a atayabilirsiniz. Bu şekilde, her renk için birden fazla öğeniz yoktur. Böyle bir şey:

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) 

Ya da bunun gibi kukla nesneleri oluşturabilirsiniz:

hold on 
for ii = 1:4 
    hb(ii) = plot(rand(1,2), rand(1,2),'color','r'); 
end 

p = plot([],[],'r'); 

legend(p,'Legs') 

eski biraz daha zarif.

2

Temiz efsane kullanım için, ben de 'IconDisplayStyle' belirlemek için gerekli olduğunu hggroup kullanımıyla ilgili dvreed77 cevabı eklemek istiyorum (Matlab R2014a), öyle ki:

%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') 
+2

Reddedenlerin için teşekkürler, her nasılsa yararlı bir cevap olduğundan eminim ^. ^ –

1

hemen dışında efsane noktalar çizmek plot:

figure; 
plot(-1,-1,'gs',-1,-1,'b^',-1,-1,'ro'); 
legend('x1','x2','x3','Location','NorthWest'); 
xlim([0,1]); ylim([0,1]);