2010.02.03 10:08


[Matlab / 매트랩] 강의 3번째

3. 2차원 그래프 그리기 (2D graph) 

우왕ㅋ 굿ㅋ 번개같은 업뎃입니다!!!!!!.............(은)는 훼이크고 

사실을 금욜날 3강까지 업뎃할 예정이었습니다... 흐흑ㅠ 이미 한참 지나버렸네요 흐흑ㅠ 

어찌되었건 은근슬쩍 넘어가서 이번부터는 그래프 그리는걸 한번 배워보도록 해요. 

그래프는 2차원 그래프 그리기, 3차원 그래프 그리기, 도형 그리기 요렇게 3 파트로 나눠서 해볼까 하는데 

오늘은 먼저 2차원 그래프 그리는 것 부터 해볼까 합니다.  

하지만!!!!!!  2차원 그래프만 보여주면 무쟈게 재미 없으니깐 한번 다양한 그래프를 보여줘서 여러분도 조만간 이런 그래프를 그릴 수 다는 꿈과 희망을 갖게하기 위해 다음과 같은 그래프들을 준비해보았습니다!!!!! 

이름하여 야심작 초슈퍼울트라그래프 프로젝트 G-project3 

 

일부러 요런거 한번 준비해봤습니다. 후후 좀 무리했습니다ㅠ 

  

 3차원 그래프입니다.

 

마찬가지로 3차원 그래프인데 조금 다르죠? 

 

 매트랩에서 예시로 주어지는 그래프입니다.

  

 

위에것과 같은 그래픈데 살짝 다르죠? 

 

 마찬가지로 위의 그래프와 데이터는 같습니다. 표현 형식은 좀 다르죠?

  

 

요런 2차원 그래프도 표현이 당연히! 가능합니다. 

 후후 아름답군요. 엘레강스합니다.

 위에 나온 그래프 중에서 가장 빈티나는(...) 2차원 그래프부터 그려보는 걸 한번 해볼까 하는데요.

 그래프 그리는 순서는 다음과 같습니다.

 1) x축 데이터 정하기(벡터로 표현).
 2) y값을 x 값을 이용하여 나타내기.
 3) plot명령어를 사용하여 그리기.
 4) 추가적인 옵션(그래프 색, grid, x,y이름표 붙이기, 그래프 이름, 범례 표시 등등) 

주로 제가 사용하는 방법은 위의 형식입니다. 물론 다른 방법도 있습니다만...! 하나하나 차근히 해보도록 해요. 

일단 예를 한번 들어보겠습니다. 

y=3*x 그래프를 그려보도록 하겠습니다. 

1) x 데이터 지정하기(벡터로 표현)

그리고자 하는 x축 범위를 예를 들어 -3~3 까지 나타내고 싶다고 합시다.
이때 주의할 점은 x축 데이터를 벡터로 표현해야 한다는 것입니다. 

왜냐고요? 

매트랩이 그래프를 그려주는 원리를 일단 설명을 해야 할 것 같네요. 

매트랩이 2차원 그래프를 그리기 위해선 데이터가 2 세트가 필요합니다. 

x 데이터와 그에 대응하는 y 데이터죠. 

예를 들어 x = [ 1 2 3 4 5] 라는 데이터가 있고
y=[2 4 6 8 10] 이라는 데이터가 있다면 

x의 첫번째 데이터와 y의 첫번째 데이터를 하나의 세트로 생각해서 (1,2)를 그래프에 나타내줍니다.
마찬가지로
x의 두번째 데이터와 y의 두번째 데이터를 하나의 세트로 생각해서 (2,4)를 그래프에 나타내줍니다.
역시나 마찬가지로 (3,6),(4,8),(5,10)을 그래프에 찍어주는 형태입니다. 

즉, x데이터와 y의 데이터를 순서대로 1:1 대응을 시켜서 그래프를 그려주는거죠. 

따라서 x 데이터와 y의 데이터는 벡터의 형태 (1,m 크기의 행렬)로 표시되어야 하며, 두개의 크기가 같아야 합니다

물론 위의 경우는 점으로 표시되지만, plot명령어를 쓰게되면 그 사이를 선으로 연결시켜 줍니다.  

직접 매트랩 명령어와 그래프를 보여 드릴게요.
x와 y를 벡터로 나타낸 다음, plot이란 명령어를 썼습니다.

>> x=[1 2 3 4 5];
>> y=[2 4 6 8 10];
>> plot(x,y)

 

네 요렇게 나와주시는걸 볼 수 있습니다.

기본적으로 plot명령어는 파란색 선으로 그려주기 때문에 위와 같이 나타나지만 다르게도 표현할 수 있습니다.  

자, 여튼 데이터를 나타내기 위해서 벡터 형식으로 나타내야 한다는 것은 아시겠죠? 

그런데, -3~3 까지 그리기 위해서 벡터형식으로 나타내려면 숫자를 일일이 쳐줘야 한다는 단점이 있습니다.  

x=[-3 -2.99 -2.98 ..... 2.99 3]  

요런식으로 둬야 하는데 말이죠. 

하지만 현실적으로 일일이 칠 수가 없기 때문에!! 바로 입력하는 방법이 있습니다. 바로 요렇게 말이죠. 

x=[시작 값 : 데이터 하나당 크기 : 끝값]
 

예를 들어 볼게요. 

>> x=[-3: 1: 3] 

x =
    -3    -2    -1     0     1     2     3 

쉽죠? -3에서 3까지 1의 단위로 벡터를(혹은 행렬을) 만들어 줘라는 의미가 됩니다. 

위에서 x데이터와 y의 데이터를 1:1대응을 해서 나타낸다고 했으므로, 데이터가 촘촘할수록 더 정확한 그래프가 그려지겠죠? 

y=3*x를 나타내기 위해 여기선 x의 범위를 -3에서 3까지 0.01씩 지정할게요. 

>> x=[-3:0.01:3];


2) y값을 x 값을 이용하여 나타내기

y=3*x의 그래프를 그리고 싶습니다. x는 벡터로 지정되었기 때문에, 이제는 y를 벡터로 지정해줄 차례입니다. 

단순히
>> y=3*x; 

요렇게 쳐도 괜찮습니다만, 요전 앞 강의에서 행렬의 성분마다 계산!!! 을 하기 위해서는 점!! '.' 을 찍어야 한다는 것. 잊지 않으셨죠? 

위의 경우는 숫자 곱하기 벡터라는 단순한 상황이기 때문에 위의 명령어도 먹혀 들어가지만,  

2차 그래프나 3차그래프, 분수 등의 다른 형태가 나오게 되면 안되는 경우가 태반이기 때문에,
항상 점 '.'을 찍어주시는 것을 습관화합시다. 

즉 요렇게 저는 칠께요. 

>> y=3.*x; 

이렇게 되면, y는 x라는 벡터에 3을 곱한 결과를 가지는 벡터가 되는 것입니다.

3) plot명령어를 사용하여 그리기
앞에서 이미 설명을 해버렸지만, plot(x,y) 이라는 명령어를 쓰면 x 데이터와 y 데이터를 1:1 대응을 시켜서 그래프를 매트랩이 알아서 그려주게 됩니다. 요렇게 입력해주면 되겠죠? 

>>plot(x,y) 

여기까지 하면 이런 그래프가 나오게 됩니다.
>> x=[-3:0.01:3];
>> y=3.*x;
>> plot(x,y)

 

[축하드립니다!! 그래프 그리기 기본 스킬을 습득하셨습니다.]

여기까지 하면 그래프 그리기는 사실상 99% 정도는 끝난거지요. 

이제 여기서 그래프를 스리슬쩍 꾸미면 2차원 그래프는 완성되게 됩니다.

4) 추가적인 옵션(그래프 색, grid, x,y이름표 붙이기, 그래프 이름, 범례 표시 등등)

살짜쿵 위의 그래프를 꾸며볼까요? 일단 색깔과 형태를 바꿔 볼게요.
명령어는 다음과 같습니다.
plot(x,y,'색깔')
색깔 부분에는 빨간색이면 'r' 초록색은 'g' 노란색을 'y'등으로 나타낼 수 있어요. 한번 빨간색으로 해볼께요. 

>> plot(x,y,'r') 

 

쉽죠? 형태도 바꿀 수 있습니다. 점이나 +, 사각형, 원 등으로 표현할 수도 있어요. 색깔 치는 부분에 형태에 관한 명령어나, '색깔,형태'의 형식으로 나타내주면 됩니다. 한번 보여 드릴게요.
(형태에 관한 명령어 점 -> . 사각형 ->s 원->o 등등. help plot을 치면 쉽게 알 수 있습니다.)

>> plot(x,y,'ro') 

 

데이터 개수가 많아서 원이 겹쳐 굵은 선으로 보이는 군요. 데이터 개수가 적으면 원으로 보입니다 하핫  

다음은 다른 옵션들을 적용해볼게요. 순서대로 적용하겠습니다. 

x축 이름 표시 (xlabel('이름'))
y축 이름 표시 (ylabel('이름'))
그래프 제목 표시 (title('이름'))
경계 조절(그래프 나타낼 범위 조절) (axis([x최소 x최대 y최소 y최대])
그리드 표시 (grid on) 

>> xlabel('x axis')
>> ylabel('y axis')
>> title('graph')
>> axis([-2 2 -8 8])
>> grid on 


 

여러가지 옵션들이 적용된 것을 볼 수 있죠?

 









이 외에도 중요한 옵션들이 있습니다만, 일단은 요정도로 2차원 그래프의 기초를 끝내도록 하겠습니다. 

다음 강의에서는 지금 나온 2차원 그래프를 조금 더 응용한 사례와 3차원 그래프 그리기를 해볼게요. 

기대하십시오. 후후  


Tip!!
그래프를 복사하실땐 figure메뉴창의 edit->copy figure을 누르신 후
한글 같은 프로그램에서 붙여넣기 하시면 됩니다.

뭐 캡쳐하셔서 써도 되구요ㅎ

저작자 표시 비영리 변경 금지
Posted by freezkim

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 2013.07.23 21:54

    명강의입니다.

  3. 2013.07.29 04:42

    제가 이거와 관련해서 막히는 부분이 있어서요,, 아래에 스크립트 내용 적습니다

    x = 0:0.01:2;
    y = (1 / ((x - 0.3).^2 + 0.01) + 1 / ((x-0.9).^2 + 0.02));

    이렇게 치면 자꾸 이런 오류가 뜨네요

    ??? Error using ==> mldivide
    Matrix dimensions must agree.

    이 문제를 어떻게 해결해야할지 참..

    .^이 문제라길래 .을 뺴고 했더니

    당연히,

    ??? Error using ==> mpower
    Inputs must be a scalar and a square matrix.

    이런 문제가 생깁니다

    고수님의 도움이 시급히 필요합니다~!

  4. 2013.10.30 00:24

    매트랩하다가 막히면 제일 먼저 이곳에 옵니다 수고하세요!

  5. 2014.07.25 08:19

    잘 배우고 있습니다. ^^

  6. 2014.08.11 17:22

    정말 감사합니다!!! 잘배우고 갑니다 ^^

  7. 2014.08.28 11:01

    잘배우고갑니다! 혹시 그래프에 예를들아 y =x 란 그래프에 (5,5) 란 점을 찍어서 표현하려고하면 어떻게해야하나요??? 그래프도 그리고 그래프에 특정한 (5,5) 란점을 찍고싶은데..

  8. 2014.11.11 23:48

    감사해요!!
    많은 도움이 되었습니다~~~

  9. 2015.01.19 18:30

    강의 잘 보았습니다! 정말 도움 많이 되고 있어요^^ 근데 질문 하나만 할게요. 제가 plot(x,y,'ro')로 했는데 그래프가 위에서처럼 둥근 선모양(?)으로 나오지 않고 x,y에 해당하는 부분만 동그라미로 쳐저서 나오는데 이건 matlab버젼이 달라서 그런건가요?

  10. 2015.02.01 18:52

    강의 정말 줄줄이 잘 보고 있습니다 완전 감사합니다!!!^^ 재밌고 이해도 너무 잘되요ㅠㅠ 최고요!!!!

  11. 2015.05.09 23:54

    감사합니다 !! 정말 잘배웠어요 ~

이전버튼 1 ... 30 31 32 33 34 35 36 37 38 ... 42 이전버튼

티스토리 툴바