[MATLAB] Legend를 사용할 때 유용한 팁 (1) 일부 legend만 표기

2022. 6. 28. 11:27·프로그래밍 Programming/매트랩 MATLAB

한 figure에 그래프를 워낙 많이 그리다보면 labeling이 중요하다. 이런 figure를 그리는 일들을 반복작업할 때 도움이 되는 팁들을 적고자 한다.

 

이 글은 일부 plot만 legend를 넣고 싶을 때 사용하는 방법에 대해 다룬다.


Plot에 Displayname을 지정하는 방법

 

이 질문은 구글에 검색하면 많은 답변들이 있지만 내가 제일 편한 방식은 다음과 같다.

 

plot을 그릴 때 'Displayname'을 지정할 수 있다. 이는 legend에 나올 이름을 지정하는 것이다. 예를 들면

x1 = 0:0.1:2*pi ;
x2 = 0:0.1:2*pi ;
y1 = sin(x1);
y2 = cos(x2);

figure;
plot(x1,y1,'Displayname','sine') ; hold on;
plot(x2,y2,'Displayname','') ;
legend('Location','best');
grid on;

다음과 같이 sine, cosine function을 그릴 때 보면

 

 

이렇게 sine function은 표기가 되고, displayname을 ''로 지정할 경우에는 아무 글씨도 나오지 않는다.

하지만 아예 주황색 plot은 legend에 나오지 않도록 하고 싶을 것이다.

 

다음과 같이 변경하면 된다.

 

x1 = 0:0.1:2*pi ;
x2 = 0:0.1:2*pi ;
y1 = sin(x1);
y2 = cos(x2);

figure;
plot(x1,y1,'Displayname','sine') ; hold on;
plot(x2,y2,'HandleVisibility','off') ;
legend('Location','best');
grid on;

 

두 번째 plot에서 'HandleVisibility'를 'off'로 설정한다. 이렇게 하면 아래처럼 legend에서 아예 사라진다.


MATLAB에서 제시한 방법 (plot의 핸들을 받아서 사용하는 방식)

 

 

이 방법 외에도 MATLAB help center를 가보면 다음처럼 하도록 되어있다.

 

x = linspace(0,pi);
y1 = cos(x);
p1 = plot(x,y1);

hold on
y2 = cos(2*x);
p2 = plot(x,y2);

y3 = cos(3*x);
p3 = plot(x,y3);
hold off

legend([p1 p3],{'First','Third'})

이렇게 하면 첫 번째, 세 번째 plot만 legend가 생성된다.

하지만 이 방법은 내가 선호하지 않았던 이유가 있는데, for문 안에서 반복적으로 그래프를 생성할 때 불리한 방식이라는 점이다.

계속해서 한 figure 안에 plot이 늘어나는데 저렇게 핸들을 추가하는 것이 번거로웠다.

 

아니면 저렇게 응용할 수 있게 하고자 코드를 다음처럼 수정할 수 있다.

 

hand = zeros(2,1) ;
name = cell(2,1) ;
name_set = ["first","second","third"] ;
n = 0 ;
x = linspace(0,pi);

figure ;
for i = 1:3
    y = cos(i * x);
    p = plot(x,y);
    hold on;
    if i ~= 2
        n = n+1; 
        hand(n) = p ;
        name{n} = char(name_set(i)) ;
    end
end
legend(hand, name);

위 코딩의 결과

 

 

이 방식은 for문 안에서 hand라는 array에 plot에 대한 handle을 저장하고, legend로 사용할 이름을 cell array에 저장해서 나중에 for문이 끝나면 legend를 보이도록 하는 방식이다.

만약 for문에서 얼마나 많은 핸들이 저장될 지 알 수 없으면 미리 array 크기를 할당하지 않고 for문 안에서 증가하도록 할 수는 있지만 좋은 코딩방식은 아니다. (matlab에서는 미리 array 크기를 할당하고 그 안에 저장하는 것을 권장하고 있다.)

 

위 코딩에서 cell array는 string을 저장하지 않고 char만 저장하며, name_set은 이름을 저장하기 위해 string으로 저장했음에 주의해야한다. 즉, cell과 string 등 다양한 type을 헷갈리지 않고 잘 써야하기 때문에 번거롭게 느낄 것이다.

 

따라서 본인이 편한 방식에 따라서 처음에 소개한 방법을 쓰거나, 지금과 같은 방법 골라쓰면 된다.

 

 

 


 

 

참고 자료

 

https://kr.mathworks.com/help/matlab/ref/legend.html#bu_sz6u-1

 

좌표축에 범례 추가 - MATLAB legend - MathWorks 한국

legend 함수를 호출하고 레이블을 빈 문자형 벡터나 빈 string형이나 셀형 배열 또는 string형 배열의 빈 요소로 지정하면 해당 항목이 범례에서 생략됩니다. R2020b 이하 릴리스에서는 그런 항목이 범

kr.mathworks.com

 

그리고 여러 mathworks의 질문 문답들

저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 Programming > 매트랩 MATLAB' 카테고리의 다른 글

[MATLAB] classic plot의 color 순서로 설정하기  (0) 2022.09.26
[MATLAB] 시작할 때 자동 실행되는 코드 (startup.m)  (0) 2022.09.05
[MATLAB] Function handle array 만들기  (0) 2022.06.14
[MATLAB] 유용한 디폴트 default 속성 명령어 저장  (0) 2022.06.05
[MATLAB] 3D plot을 그릴 때 주의할 점 : X,Y축 반전  (2) 2022.05.20
'프로그래밍 Programming/매트랩 MATLAB' 카테고리의 다른 글
  • [MATLAB] classic plot의 color 순서로 설정하기
  • [MATLAB] 시작할 때 자동 실행되는 코드 (startup.m)
  • [MATLAB] Function handle array 만들기
  • [MATLAB] 유용한 디폴트 default 속성 명령어 저장
보통의공대생
보통의공대생
수학,프로그래밍,기계항공우주 등 공부하는 기록들을 남깁니다.
  • 보통의공대생
    뛰는 놈 위에 나는 공대생
    보통의공대생
  • 전체
    오늘
    어제
    • 분류 전체보기 (458)
      • 공지 (1)
      • 영어 공부 English Study (40)
        • 텝스 TEPS (7)
        • 글 Article (21)
        • 영상 Video (10)
      • 연구 Research (99)
        • 최적화 Optimization (3)
        • 데이터과학 Data Science (7)
        • 인공지능 Artificial Intelligent (40)
        • 제어 Control (45)
      • 프로그래밍 Programming (103)
        • 매트랩 MATLAB (25)
        • 파이썬 Python (33)
        • 줄리아 Julia (2)
        • C++ (3)
        • 리눅스 우분투 Ubuntu (6)
      • 항공우주 Aeronautical engineeri.. (21)
        • 항법 Navigation (0)
        • 유도 Guidance (0)
      • 기계공학 Mechanical engineering (13)
        • 열역학 Thermodynamics (0)
        • 고체역학 Statics & Solid mechan.. (10)
        • 동역학 Dynamics (1)
        • 유체역학 Fluid Dynamics (0)
      • 수학 Mathematics (34)
        • 선형대수학 Linear Algebra (18)
        • 미분방정식 Differential Equation (3)
        • 확률및통계 Probability & Sta.. (2)
        • 미적분학 Calculus (1)
        • 복소해석학 Complex Analysis (5)
        • 실해석학 Real Analysis (0)
      • 수치해석 Numerical Analysis (21)
      • 확률 및 랜덤프로세스 Random process (2)
      • 추론 & 추정 이론 Estimation (3)
      • 기타 (26)
        • 설계 프로젝트 System Design (8)
        • 논문작성 Writing (55)
        • 세미나 Seminar (2)
        • 생산성 Productivity (3)
      • 유학 생활 Daily (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Numerical Analysis
    우분투
    논문작성
    pytorch
    수식삽입
    JAX
    WOX
    Python
    수치해석
    Linear algebra
    teps
    옵시디언
    딥러닝
    고체역학
    텝스공부
    obsidian
    인공지능
    논문작성법
    Statics
    Julia
    에러기록
    생산성
    Zotero
    Dear abby
    matplotlib
    LaTeX
    ChatGPT
    텝스
    IEEE
    MATLAB
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
보통의공대생
[MATLAB] Legend를 사용할 때 유용한 팁 (1) 일부 legend만 표기
상단으로

티스토리툴바