일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MATLAB
- 텝스공부
- Zotero
- teps
- 수치해석
- Linear algebra
- JAX
- Numerical Analysis
- Python
- Statics
- 고체역학
- LaTeX
- 생산성
- matplotlib
- IEEE
- pytorch
- 딥러닝
- WOX
- ChatGPT
- 에러기록
- 옵시디언
- Julia
- 우분투
- obsidian
- Dear abby
- 텝스
- 논문작성법
- 논문작성
- 수식삽입
- 인공지능
- Today
- Total
뛰는 놈 위에 나는 공대생
[MATLAB] Figure 그릴 때 유용한 명령어 및 기능 모음 본문
MATLAB에서 결과를 plot하고 싶을 때 유용한 기능들을 모아놓고 쓰려고 기록하는 글.
1. Plot할 때 디폴트 속성 지정하기
plot을 많이 쓰면 일일이 plot의 디테일을 지정해주는 게 번거롭고 귀찮다.
그럴 때는 아예 figure 디폴트 속성을 지정해놓으면 된다.
내가 자주 쓰는 명령은 다음과 같다.
set( groot, 'defaultLineLineWidth', 1.5 ) ; % plot line 두께 지정
set( groot, 'defaultAxesXGrid', 'on' ) ; % x축 방향으로 grid 생성
set( groot, 'defaultAxesYGrid', 'on' ) ; % y축 방향으로 grid 생성
set( groot , 'defaultAxesFontSize', 12 ); % 축에 있는 글씨 크기 지정
groot은 default 속성에 접근하기 위해 무조건 필요하다. (groot는 그래픽스 root 객체라고 한다. 자세한 내용은 https://kr.mathworks.com/help/matlab/ref/groot.html )
그 다음 argument인 'default ~~~'는 디폴트 객체 속성(그래픽스 객체 속성) 이름을 집어넣어줘야 하는데 어떻게 그 이름을 알 수 있을까?
규칙은 다음과 같다.
- 단어 default
- 객체 유형(예: Line)
- 속성 이름(예: LineWidth)
저 세 개가 조합되어서 'defaultLineLineWidth'이 된다.
그러면 이제 default는 무조건 들어가고, 객체 유형과 속성 이름을 찾으면 되겠다는 생각이 들 것이다.
이 링크를 들어가면 그래픽스와 관련된 온갖 객체들을 살펴볼 수 있다.
https://kr.mathworks.com/help/matlab/graphics-object-properties.html?s_tid=CRUX_lftnav
위 링크에 들어가 원시 객체(primitive objects)에서 Line 속성에 들어가면 다음과 같다. (아래 링크는 Line 속성을 찾을 때 나오는 링크)
https://kr.mathworks.com/help/matlab/ref/matlab.graphics.primitive.line-properties.html
나는 지금 (Primitive objects 중) Line에서 LineWidth라는 속성을 선택할 것이므로
default + Line + LineWidth
로 이름을 만들면 된다.
이렇게 규칙만 알고 있으면 원하는 기능을 찾을 수 있을 것이다.
내가 주로 쓰는 default 속성 명령은 다음 글에 올려놓았으니 참고하면 좋다.
2. Figure 크기 설정하기
내가 만약 subplot을 사용해서 한 figure에 여러 개 그림을 그리고 싶다면 MATLAB의 기본 창 크기로는 너무 작다는 생각이 들 것이다. 여러 Figure를 만들고 그 안에 subplot을 여러 개 그리는 것까지는 좋은데, 막상 그 plot을 살펴보려고 Figure를 키우는 행동을 반복적으로 해야하는 불편함이 있다.
따라서 Figure의 크기를 지정하는 코드가 필요하다.
set( gcf, 'Position', [10 10 1000 800] ) ;
gcf는 현재 열린 figure에 대한 핸들이다. 핸들은 figure에 접근할 수 있는 통로라고 생각하는 게 편하다.
이 'Position'이 Figure의 크기를 정해주는 속성이다. 'Position' 옆에 있는 벡터는 아래와 같은 의미를 가지고 있다.
[ left bottom width height ]
= [ 모니터의 왼쪽에서부터 figure의 왼쪽까지의 거리, 모니터의 아래쪽으로부터 figure의 아래쪽까지의 거리, figure의 왼쪽 오른쪽 사이 거리, figure의 위 아래 사이 거리 ]
즉 벡터의 첫 번째, 두 번째 element는 모니터에서 창을 어디에 띄울 것인지 결정하고, 세 번째, 네 번째 element는 창의 너비높이를 결정한다. 픽셀 단위라서 직관적으로 크기를 결정하기는 어렵겠지만 디스플레이 크기를 고려해서 정하면 좋다. (나의 경우에는 1920X1080이므로 당연히 width, height는 각각 1920, 1080보다는 작아야한다.)
3. Subplot를 활용하기
여러 개의 plot을 나란히 늘어놓고 확인해보고 싶을 때가 있다. 물체의 움직임에 대해 location, velocity, acceleration을 한 화면에 보고 싶은 경우와 같이 말이다.
Figure 하나에 plot 하나씩만 그리면 figure 창이 너무 많이 생겨서 불편할 뿐더러 그래프를 볼 때도 일일이 자리를 배치해줘야해서 번거롭다.
따라서 figure에 여러 그래프를 그리는 방식을 취한다. (hold on은 한 plot 위에 다른 plot을 겹치는 방식이므로 이런 경우 제외)
문법 자체는 간단하다. MATLAB의 subplot을 검색하면 알 수 있듯이 창에서 M by N으로 격자를 내고 위치를 지정해줌으로써 해결하는 것인데 이 때 위치는 가로가 먼저이고 가로줄이 끝나면 그 다음 줄로 넘어가면서 숫자를 매긴다.
figure;
subplot(2,3,1); % 2(row수)x3(column수) 격자에서 첫 번째 위치
plot(x,y);
아래 그림을 보면 그림에 써놓은 숫자처럼 가로줄 먼저 순서가 매겨진다.
그런데 이런 subplot에는 치명적인 문제점이 있다. 위 그림과 같이 여백이 끔찍하게 넓다.
이 여백을 줄이려고 여러 방법을 찾아봤는데, 직접 subplot의 객체를 받아서 위치를 지정하는 방법이 있었다.
하지만 이 방법은 subplot을 내 마음대로 늘리고 싶을 때 각각의 위치를 지정해줘야하므로 매우 번거롭다.
또는 다른 사람들이 만들어놓은 함수를 이용하는 방법도 있다.
https://kr.mathworks.com/matlabcentral/fileexchange/3696-subaxis-subplot
https://kr.mathworks.com/matlabcentral/fileexchange/39664-subtightplot
위의 사람들이 친절하게 만들어놓은 것을 써볼 수 있을 것이다.
그러나 2019b 버전 이후로 MATLAB에서 만들어놓은 함수가 있다.
그건 tiledlayout이라고 해서 subplot과 유사하지만 각 plot끼리의 거리를 좁히는 기능이 있다는 것에서 장점이 있다.
https://kr.mathworks.com/help/matlab/ref/tiledlayout.html
subplot보다 좀 더 유연하게 대응할 수 있는게, subplot은 무조건 격자를 먼저 지정하고 시작해야 하지만 위의 함수는 꼭 격자 크기를 지정하지 않아도 된다.
(나중에 사용해보고 예시를 같이 첨부하겠음)
4. Figure에 있는 UI를 현명하게 이용하기
plot을 다 하고 나서 막상 figure를 열어보면 만족스럽지 않을 수 있다. 막상 Run을 눌러놓고, plot에 추가해야할 속성을 깜빡할 수도 있기 때문이다.
내가 figure 창에서 해본 것은, 여러 개 그려진 plot 중 하나를 골라서 지우는 것, plot의 색상과 두께를 지정하는 것이 있다.
대충 그래프를 그려놓고 위 그림에서 보이는 것처럼 화살표 모양을 클릭하면 다음과 같이 plot 창 주변에 파란 네모가 생긴다.
이 때 내가 빨간색 그래프를 초록색으로 바꾸고 두께도 더 두껍게 바꾸고 싶다고 하자.
빨간색 그래프를 클릭하고 마우스 오른쪽을 클릭하면
이렇게 뜨고 여기서 다양한 속성을 바꿔줄 수 있다.
이런 식으로 plot을 후속처리 해줄 수 있다. 보통은 코드 상에서 plot을 고치겠지만, 가끔은 plot 그리는 게 반복적으로 일어나다보니 특정 plot만 조금 바꿔주고 싶을 때 이렇게 할 수도 있다.
'프로그래밍 Programming > 매트랩 MATLAB' 카테고리의 다른 글
[MATLAB] 그래프 제목에 LaTeX를 쓰고 싶을 때 (0) | 2022.05.08 |
---|---|
[MATLAB] Symbolic 식에서 복잡한 숫자로 된 분수를 소수로 바꾸기 (0) | 2022.04.07 |
[MATLAB] String형과 Char형 결합 (0) | 2022.02.24 |
[매트랩MATLAB] 기호 대입 (0) | 2021.05.24 |
[매트랩MATLAB] 기호가 포함된 행렬 계산하기 (0) | 2021.02.25 |