2016-11-30 71 views
8

我需要防止在Matlab繪圖圖例上顯示特定繪圖條目。防止在MATLAB繪圖圖例上顯示特定繪圖條目

樣品:

% x and y are any plot data 
for i=1:5 
    plot(x,y); 
    plot(x2,y2,'PleaseNoLegend!'); % I need to hide this from legend 
end 
legend('show'); 

有沒有我可以設置繪圖命令內部,這種特定的條目不傳說中出現的任何標誌?

+1

'h = plot(...);至少對於HG1而言,行爲(h,'legend','false')',不知道HG2。 –

+0

代表另一個用戶詢問:請問您能更具體嗎?您是否有任何條件可以設定爲不繪圖? –

+0

我正在繪製for循環,也在代碼的另一部分繪製,一些繪圖只是輔助繪圖,我不希望它顯示在圖例中。 – Pedro77

回答

6

您可以通過將'HandleVisibility'屬性設置爲'off'來實現此目的。請注意,這會將這些圖的手柄隱藏到所有功能,而不僅僅是legend

例如,

hold on 
for k = 1:3 
    x = 1:10; 
    y = rand(1,10); 
    x2 = x; 
    y2 = y + 2; 
    plot(x,y); 
    plot(x2,y2,'--','HandleVisibility','off'); % Hide from legend 
end 
legend('show') 

產生圖形

enter image description here

+0

這種方法可能會對其他功能產生意想不到的後果。我還建議爲特定的手柄設置圖例,例如例如'lh = plot(x1,y1,x2,y2);傳說(lh(1),'label1')' – stephematician

+2

@stephematician是的,這就是我最後一行的意思。你的想法更好;你應該發表一個答案 –

4

可以使用semi-documented function called hasbehavior,允許你給你發出的繪圖命令後忽略個別地塊中的一個傳奇。

figure; 
hold on; 
for i=1:5 
    plot(x,y); 
    h = plot(x2,y2); 
    hasbehavior(h,'legend',false); 
end 
legend('show'); 

,它的半記錄的事實表明,它可能打破遲早更新MATLAB的版本,所以請謹慎使用。對某些應用來說,它可能仍然是一個方便的選擇。

正如@stephematician指出的那樣,這個MATLAB內置函數在Octave中也是不可用的,這可能是另一個爲什麼其他答案更可取的原因。

+0

這是一個很好的答案!唯一的缺點是它與Octave不兼容(如果你遇到這種情況);) – stephematician

+0

@stephematician謝謝:)好點,我更喜歡原則上的交叉兼容性,但我並不太驚訝,這是不是'適用於Octave,對不起:(:(並且謝謝,Luis;) –

4

正如Luis Mendo所說(我不知何故錯過了這個),句柄在他的答案中隱藏了所有其他函數,這在大多數情況下都可以,但是看起來與上面完全一樣的另一種解決方案並沒有這種影響是:

k_values = 1:3; 
h = nan(size(k_values)); 
x = 1:10; 

hold on 
for k = k_values 
    y = rand(size(x)); 
    y2 = y + 2; 
    h(k) = plot(x,y); 
    plot(x,y2,'--'); 
end 
hold off 

legend(h, strcat('data', num2str(k_values'))) 

最後一個命令設置爲每個圖例項處理由plot(x,y)命令返回。第一個參數是將出現在圖例中的一個1x3線條句柄陣列,第二個參數是一個3x5字符矩陣,其中每一行都是一個標籤。

+0

這應該是最乾淨的解決方案,因爲它不依賴於半文檔功能,並且只能專門處理圖例代 –

+2

'legend(h,strcat(' data',num2str(k_values。')))'對我有用 –

+4

只是爲了說明這個問題:答案的要點在於,應該生成一個'h'數組並且調用'legend'在任何實際應用程序用戶將爲他們的圖例文本創建一個字符數組/單元格:) –