MATLAB 을 사용하여 알고리즘을 개발하고 분석하면서 MATLAB 의 다양한 그래프 기능을 사용하실 것이라고 생각합니다. 10 년도 전에 MATLAB 을 학부 시절에 접하고, MATLAB 의 그래프 기능들이 정말 유용하다는 생각을 했던 기억이 있습니다.
오늘은 MATLAB 을 사용하여 그래프의 영역을 나타내는 방법에 대해서 조금 소개를 하려 합니다.
예를 들어 아래 두 그래프로 둘러싸인 영역을 표시하고 싶을 때 MATLAB으로 어떻게 표현해야 되는지에 대해서 소개를 하려 합니다.
y = x+3
y = 2*x-6
위 두개의 그래프로 둘러싸인 영역을 표시하는 간단한 코드는 아래와 같습니다. 아래 코드에서 설명할 부분은 x_, y_ 를 설정하는 부분과 fill() 이라는 함수에 대한 부분이 될 거 같은데~ fill 함수는 이름에서도 알 수 있듯이 다각형 내부의 색을 채워주는 함수입니다. fill 함수가 다각형의 좌표값을 필요로 하다 보니 x_, y_ 값을 아래와 같이 표현해서 닫힌 형태의 다각형으로 만들어 준 것이고 마지막 인자인 ‘r’ 은 red 즉 빨간색으로 표시하라는 뜻입니다.
x=linspace(-10,30,1001);
y1 = x+3;
y2 = 2*x-6;
x_=[x fliplr(x)];
y_= [y1 fliplr(y2)];
figure
fill(x_, y_, 'r')
grid on
그래프는 아래와 같이 표현됩니다.
fill 함수와 유사한 함수로 patch 함수가 있고~ patch 함수는 하나 이상의 채워진 다각형을 만들어 주는 함수입니다. 다각형 한개를 그릴때는 사실 동일하다고 볼 수도 있을 것 같네요. 위 코드에서 fill 을 patch 로 바꿔도 동일한 결과를 얻을 수 있습니다.
fill, patch 함수가 다각형 내부의 색을 채워주는 함수이다 보니 x_, y_ 와 같은 변수들을 만들어서 사용했는데~ 조금 더 쉽게 영역을 표시하는 함수로 area 함수를 사용할 수가 있습니다. 아래 메뉴얼에도 나와 있지만 2차원 그래프에서 그래프 선과 basevalue 로 둘러싸인 부분의 영역을 표시해주는 함수입니다. basevalue 의 디폴트 값은 0 입니다.
https://kr.mathworks.com/help/matlab/ref/area.html?searchHighlight=area&s_tid=doc_srchtitle
area 함수를 사용한 코드는 아래와 같습니다.
x=linspace(-10,30,1001);
y1 = x+3;
y2 = 2*x-6;
x=x(:);
y=[y1(:) y2(:)];
figure
h = area(x, y);
grid on
코드를 표현하는 것은 조금 더 쉬운 듯한데…. 그래프를 확인해 보면 의도와는 뭔가 조금 다른 것 같습니다. 즉 원하지 않는 파란색 영역도 나타낸 것을 확인할 수 있습니다.
파란색 영역을 없애기 위해서 조금 더 코드를 추가해야 될 것입니다. 파란색 영역을 투명하게 만들기 위해서 해당 부분의 색깔을 흰색으로 만들어 준 후에~ alpha 함수를 사용하여 투명도를 조절해 줬습니다~
h(2).FaceColor = [1 0 0];
h(1).FaceColor = [1 1 1];
alpha(h(1),0.1)
이렇게 해서 나타나는 그래프를 보면~ 아래와 같이 원하는 영역만 표시된 그래프를 얻을 수가 있습니다~
'programming language > MATLAB' 카테고리의 다른 글
MATLAB 입사 반사파 그리기 애니메이션 animatedline, drawnow (0) | 2019.10.22 |
---|---|
MATLAB cell 중복 제거 및 중복 내용 확인하기 (1) | 2019.10.13 |
MATLAB 주기함수 만드는 방법 (583) | 2019.10.10 |
MATLAB brush 데이터 가져오기 (0) | 2019.06.07 |
MATLAB 그래프 내에 그래프 넣기 (0) | 2019.04.13 |
MATLAB 스트럭처 정렬 방법 (0) | 2019.03.27 |
MATLAB 브러시, 데이터 커서 기능을 사용하여 데이터 가공하기 (0) | 2019.03.04 |
MATLAB 필터 pass band 게인 normalization 방법 (0) | 2019.02.01 |
댓글