2012-12-03 40 views
34
t = 0 : 0.01 : 2 * pi; 
s = sin(t); 
c = cos(t); 
m = -sin(t); 

hold on; 
plot(t, s, 'r'); 
plot(t, c, 'b'); 
plot(t, m, 'g'); 
hold off; 

legend('', 'cosine', ''); 

The Plotting如何在繪圖中僅顯示特定曲線子集的圖例?

有我繪製幾條曲線。我只想爲其中一些顯示圖例。我該怎麼做?

例如,如何在上面的繪圖中只顯示餘弦曲線可見的圖例?當我將legend()函數調用爲legend('', 'cosine');而不是添加空的第三個參數時,確實會從圖例中刪除第三條綠線。但是這並不能解決我的問題,因爲不需要的紅線保持可見。

回答

26

只需將所需的圖例句柄存儲在變量中,並將該數組傳遞給legend。在你的情況下,就只能是一個值,像這樣:

hold on; 
plot(t, s, 'r'); 
h2 = plot(t, c, 'b'); % # Storing only the desired handle 
plot(t, m, 'g'); 
hold off; 

legend(h2, 'cosine'); % # Passing only the desired handle 

你應該得到這樣的情節:

enter image description here

+2

注意,使用這種方法,一旦你關閉圖例並通過UI將其重新打開,所有行將回到圖例中。 – Jonas

+0

@Jonas謝謝你指出。 –

+0

PNG對於這種圖像更好。 –

5

讓我們先從你的變量和繪製出來:

t = 0 : 0.01 : 2 * pi; 
s = sin(t); 
c = cos(t); 
m = -sin(t); 

figure; 
hold ('all'); 
hs = plot(t, s); 
hc = plot(t, c); 
hm = plot(t, m); 

有一個屬性叫做IconDisplayStyle。它埋得很深。你需要遵循的路徑是:

線 - >註釋 - > LegendInformation - > IconDisplayStyle

設置IconDisplayStyle財產off會讓你跳過該行。作爲一個例子,我將關閉hs的傳說。

hsAnno = get(hs, 'Annotation'); 
hsLegend = get(hsAnno, 'LegendInformation'); 
set(hsLegend, 'IconDisplayStyle', 'off'); 

當然,你可以繼續做這樣的:

set(get(get(hs, 'Annotation'), 'LegendInformation'), 'IconDisplayStyle', 'off'); 

但我發現它更難理解。

現在,legend函數將跳過hs

結束我的代碼以這樣的:

legend('cosine', 'repeat for this handle') 

會給你這樣的: enter image description here

編輯:喬納斯曾在評論一個很好的建議: 設置HC的DisplayName屬性是這樣的:

set(hc, 'DisplayName', 'cosine'); 
legend(gca, 'show'); 

會給你你需要的圖例。您將會將您的線路處理與'cosine'關聯。因此,您可以使用'off''show'參數調用圖例。

+2

我建議設置'DisplayName'線條屬性,而不是使用名稱調用'legend',以便在GUI中關閉/打開圖例後結果相同。 – Jonas

+0

謝謝@Jonas。更新了我的答案。 – HebeleHododo

1

你可以只改變順序至極曲線繪製和傳說適用於第一條曲線:

t = 0 : 0.01 : 2 * pi; 
s = sin(t); 
c = cos(t); 
m = -sin(t); 

plot(t,c,t,s,t,m) % cosine is plotted FIRST 
legend('cosine') % legend for the FIRST element 

如果我想提出一個傳奇的餘弦和 - 正弦:

plot(t,c,t,m,t,s) % cosine and -sine are first and second curves 
legend('cosine', '-sine') 
31

我不喜歡存儲句柄值,當我在圖中有很多圖時,它變得很混亂。所以我找到了另一個解

t = 0 : 0.01 : 2 * pi; 
s = sin(t); 
c = cos(t); 
m = -sin(t); 
hold on; 
plot(t, s, 'r', 'HandleVisibility','off'); % Plotting and telling to hide legend handle 
h2 = plot(t, c, 'b', 'DisplayName', 'cosine'); % Plotting and giving legend name 
plot(t, m, 'g', 'HandleVisibility','off'); % Plotting and telling to hide legend handle 

legend show % Generating legend based on already submitted values 

這給了我像Eitan T的答案中所示的圖。

需要注意的是,這也會影響其他matlab功能,例如cla只會刪除圖例中提到的圖。在Matlab文檔中搜索HandleVisibility以獲取更多信息。

+3

+1優雅的解決方案我用這個。 – neuronet

+2

也使用了這個,因爲我使用動態命名曲線(很好地繪製標準偏差,但將它們隱藏在圖例中)。 – gaborous

+2

如果您想在UI中直接進行此更改,那麼最好的解決方案。 –

1

爲了擴大塞巴斯蒂安的答案,我有一個特例,我用兩種格式之一(桁架樑既可以壓縮也可以張緊)繪製幾條線,並且能夠繪製圖例中特定的繪圖手柄,只要標籤的長度相同

for ii=1:nBeams 
    if X(ii)<0 %Bars with negative force are in compession 
     h1=plot(linspace(beamCord(ii,1),beamCord(ii,3)),... 
      linspace(beamCord(ii,2),beamCord(ii,4)),'r:'); 
    elseif X(ii)>0 %Bars with positive force are in tension 
     h2=plot(linspace(beamCord(ii,1),beamCord(ii,3)),... 
      linspace(beamCord(ii,2),beamCord(ii,4)),'b'); 
    end 
end 

legend([h1;h2],['Compression';'Tension ']); 

在「張力」後面添加4個空格,以便字符數一致。

-2

快速的在情節黑客:

  1. 切一切你不想出現在傳說
  2. 應用傳說
  3. 粘貼
+0

請使用明確的內置格式:) –

+0

你是什麼意思的剪切和粘貼?你的意思是在'legend'命令之後移動其他'plot'命令嗎?提供一個代碼片段來演示。 – Cecilia