2017-01-24 39 views
1

我想給整個情節傳奇。我知道很多情況下聽起來很容易。但是這讓我對這個特例感到困惑。如何在Matlab中同時顯示補丁填充和圖線的圖例?

figure; 

p1 = plot(1:3,[y1,y2,y3],1:2,y4,1:3,[y5,y6,y7,y8,y9]) 

% Add lines 
hold on 
h1 = line([1 2 3],[10 10 10]); 
h2 = line([1 2 3],[100 100 100]); 
% Set properties of lines 
set([h1 h2],'LineStyle','none') 
% Add a patch 
p2 = patch([1 3 3 1],[10 10 100 100],[.85 .85 .85],'LineStyle','none','FaceAlpha',0.5,'DisplayName','Lab Measurement'); 
hold off 
set(gca, 'children',flipud(get(gca,'children')),'XTickLabel', {'L1' ' ' ' ' ' ' ' ' 'L2' ' ' ' ' ' ' ' ' 'L3'},'YScale', 'log') 
NameArray = {'Marker','Color','LineStyle','DisplayName'}; 
ValueArray = {'o','[0.2 0.2 0.2]','-','Var1';... 
    '+','[0.2 0.2 0.2]','-','Var2';... 
    '*','[0.2 0.2 0.2]','-','Var3';... 
    '.','[0.2 0.2 0.2]','-','Var4';... 
    'x','[0.2 0.2 0.2]','-','Var5';... 
    's','[0.2 0.2 0.2]','-','Var6';... 
    'd','[0.2 0.2 0.2]','-','Var7';... 
    '^','[0.2 0.2 0.2]',':','Var8';... 
    'h','[0.2 0.2 0.2]','-.','Var9'}; 
set(p1,NameArray,ValueArray) 

當我試圖通過給

legend(p1) 

legend(p2) 

這看起來是什麼樣子時,我嘗試傳說(P2)

enter image description here揭示傳奇

它只是爲每個部分都做得很好,但不是在一起。

我還通過在命令賦予傳奇試圖

legend([p2 p1],{'Lab Measurement','Var1','Var2','Var3','Var4','Var5','Var6','Var7','Var8','Var9'}) 

legend([p2 p1],{'Lab Measurement',{'Var1','Var2','Var3','Var4','Var5','Var6','Var7','Var8','Var9'}}) 

它沒有工作。任何幫助將不勝感激!

+0

你顯示的下一個錯誤是什麼? – Suever

+0

使用horzcat時出錯 串聯的矩陣的大小不一致。 – Orangeblue

+0

你能描述傳說應該是什麼樣子嗎? – codeaviator

回答

2

每的文檔plot

h = plot(___)返回圖線對象的列向量。

當提供多個情節對,在你的情況下,從plot返回據說對象的數組:

>> a = plot(1, 2, 1, 2) 

a = 

    2×1 Line array: 

    Line 
    Line 

支架符號進行連結[]一般意味着用戶想要創建一個行矢量,MATLAB在矢量和標量的情況下不做假設。這意味着它嘗試使用horzcat來連接數組,這在邏輯上會引發錯誤。

>> b = plot(1, 2); c = [a b]; 

Error using horzcat 
Dimensions of matrices being concatenated are not consistent. 

你需要明確地告訴MATLAB要vertically concatenate這些,或transpose列向量爲行向量。

>> c = vertcat(a, b) 

c = 

    3×1 Line array: 

    Line 
    Line 
    Line 

或:

>> c = [a.' b] 

c = 

    1×3 Line array: 

    Line Line Line 

這兩者都與legend兼容。

耶。

1

只需使用

p = vertcat(p2,p1); 
legend(p) 

問題解決了。謝謝!