2017-02-26 3 views
4

MATLAB 범례는 플롯에 넣은 지침을 포함하여 플롯의 모든 항목을 나열합니다. 그 주위에 얻을플롯의 일부 그래픽 개체에 대한 MATLAB 범례 항목 숨기기

퍼지는

*Plot 
*Add legend 
*Add guidelines 

그러나, MATLAB 표시된 데이터에 앉아 다음 지침을 의미 전면에 가장 최근의 라인을두고 작업을 수행하는 것입니다; 추악하고 혼란 스럽다.

비슷한 문제가 당신이 추한 될 수있는 복잡한 플롯, legend 밖으로 괴물 모든 것을 잡고, 그리고 음모를 꾸미고 순서와 해결 방법을 모든 시간을 구축 발생

예제 코드 :

%**** Optional guidelines 
figure(1) 
plot([2 2],[0,1],'k--'); hold on 

%**** DATA 
N = 4; 
y=rand(5,N); 
x=1:1:5; 
for plotLoop=1:N; 
    %* Plot 
    figure(1) 
    plot(x,y(plotLoop,:)); 
    hold on 
end 

%*****LEGEND 
hLegend = legend(LegTxt,... 
       'interpreter','latex',... 
       'location','eastoutside') 

(코드 블록을 이동 위에 언급 된 상황을 재현하기 위해)

합리적으로 고칠 수있는 방법은 무엇입니까?

+0

: 핸들의 배열에 전설을 해제하는 가장 좋은 방법은 전설을 생산할 수없는 그래픽 객체에 대한 시도 - 래퍼, 그냥 돌이이다 더 일반적 - 지침 일뿐만 아니라 예 오류 상자 또는 이와 유사한 항목을 범례 항목으로 표시하지 않으려면 – Jonas

답변

6

당신이 특정 그래픽 (그리고 다시 전설을 전환하고있는 경우 그 경우에도 작동합니다) 전설을 생산하지 않는 개체를하려는 경우, 당신은 수정할 수 LegendInformation :

%# plot something that shouldn't show up as legend 
handleWithoutLegend = plot(something); 

%# modify the LegendInformation of the Annotation-Property of the graphical object 
set(get(get(handleWithoutLegend,'Annotation'),'LegendInformation'),... 
    'IconDisplayStyle','off'); 

%# toggle legend on and off at will, and never see the something-object appear 

당신이하려고하면 그것을 비트를 만들기 위해 내가 제목을 업데이트 한

for h = listOfHandles(:)' 
    try 
     set(get(get(h,'Annotation'),'LegendInformation'),... 
     'IconDisplayStyle','off'); 
    end 
end 
+1

이 명령을 "noLegend"함수 또는 다른 함수에 포장하는 것이 좋습니다. 솔직히 달리 기억할 수 없기 때문입니다. – Jonas

+0

코드를 사용해 보았는데'get (bla, 'LegendInformation')'에''셀에서 이중 변환이 불가능합니다 '라는 오류 메시지가 나타납니다. 왜 그런지 알아? 코드가 일부 그래픽 개체에만 작동한다고 가정합니다. –

+0

@ Mark_Anderson : 이제 문제를 해결하는 루프 솔루션을 추가했습니다. – Jonas

3

크래프트 legend에 입력하는 사용자 지정 핸들을 만듭니다. 플롯 핸들을 연결하여 범례가 입력으로 받아 들여지는 객체를 형성 할 수 있습니다.

필요한 코드가 좋지는 않지만 작동합니다. I 데이터는 셀 어레이로부터 추출 다소 복잡한 코드로부터 예를 추출하기 때문에 현학적 또는 관심자

%**** Optional guidelines for periodicity 
figure(1) 
plot([2 2],[0,1],'k--'); hold on 

%**** DATA 
N = 4; 
y=rand(5,N); 
x=1:1:5; 

for plotLoop=1:N; 
    LegTxt{plotLoop} = num2str(plotLoop); 
    %* Plot 
    figure(1) 

    % if statement to construct a handle for the legend later 
    if plotLoop==1 
     htot=plot(x,y(plotLoop,:)); 
    else 
     h=plot(x,y(plotLoop,:)); 
     % Append this info to the figure handle 
     htot= [htot, h]; 
    end 
    hold on 

end 

%*****LEGEND 
hLegend = legend(htot,LegTxt,... 
       'interpreter','latex','FontSize',16,... 
       'location','eastoutside') 

는 루프 for plotLoop=1:N;는 여기에있다. 분명히 당신은 많은 사용 시나리오를 위해 그 루프를 제거 할 수 있습니다, 나는 단지 가장 유연한 포맷으로 코드를 유지하기로 결정했습니다!

+0

이 방법이 유용합니다. 그러나 수동으로 토글을 전환 한 다음 다시 다시 실행하면 원치 않는 항목이 계속 표시됩니다. 다행히도 또 다른 해결책이 있습니다 : http://stackoverflow.com/a/42471561/232610 – Jonas

+0

충분히 문제가되지 않았으므로 MATLAB에서 수동 플롯 상호 작용 도구를 사용하지 않았습니다. –