我需要防止在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');
有沒有我可以設置繪圖命令內部,這種特定的條目不傳說中出現的任何標誌?
我需要防止在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');
有沒有我可以設置繪圖命令內部,這種特定的條目不傳說中出現的任何標誌?
您可以通過將'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')
產生圖形
這種方法可能會對其他功能產生意想不到的後果。我還建議爲特定的手柄設置圖例,例如例如'lh = plot(x1,y1,x2,y2);傳說(lh(1),'label1')' – stephematician
@stephematician是的,這就是我最後一行的意思。你的想法更好;你應該發表一個答案 –
可以使用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中也是不可用的,這可能是另一個爲什麼其他答案更可取的原因。
這是一個很好的答案!唯一的缺點是它與Octave不兼容(如果你遇到這種情況);) – stephematician
@stephematician謝謝:)好點,我更喜歡原則上的交叉兼容性,但我並不太驚訝,這是不是'適用於Octave,對不起:(:(並且謝謝,Luis;) –
正如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字符矩陣,其中每一行都是一個標籤。
這應該是最乾淨的解決方案,因爲它不依賴於半文檔功能,並且只能專門處理圖例代 –
'legend(h,strcat(' data',num2str(k_values。')))'對我有用 –
只是爲了說明這個問題:答案的要點在於,應該生成一個'h'數組並且調用'legend'在任何實際應用程序用戶將爲他們的圖例文本創建一個字符數組/單元格:) –
'h = plot(...);至少對於HG1而言,行爲(h,'legend','false')',不知道HG2。 –
代表另一個用戶詢問:請問您能更具體嗎?您是否有任何條件可以設定爲不繪圖? –
我正在繪製for循環,也在代碼的另一部分繪製,一些繪圖只是輔助繪圖,我不希望它顯示在圖例中。 – Pedro77