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. 2010/02/26 12:07

    즐겨찾기해놓고 오늘에서야 보네요 너무 쉽게 알려주셔서 너무 감사 ㅎ

  2. 2010/03/15 21:50

    좋은 정보 진심으로 감사드립니다. ㅜㅜ

  3. 2010/03/21 11:48

    진짜 보기 좋게 잘설명해주셨네요! 감사드립니다^^

  4. 2010/03/22 01:03

    와우~ 명쾌한설명 정말정말 고맙습니다^^

    근데 벡터나 행렬 정의할때 [ ] 를 이용하잖아요, ( )는 언제 사용하는건가요?
    x=[1 2 3]은 되고 x=(1 2 3)은 안되고
    x=[-3:1:3]은 되고 x=(-3:1:3)도 되고
    차이를 잘 모르겠어요ㅠㅠ

    • 2010/03/22 02:32

      흠 그냥 기본적으로는 행렬정의할 때 [ ] 로 쓰신다고 생각하시구요ㅠ

      예외적으로
      1:1:3 이런식으로 처음값, 변화량, 끝값의 형태로 숫자를 정의할 때만 행렬 기호 [ ] 를 쓰지 않아도 정의가 된다고 생각해주세요ㅠ

      그러니깐
      x=-3:1:3 ; 요건 정의가 되는거죠...

      하지만 이때
      x=(-3:1:3);

      여기서 괄호의 역할은 아무것도 아니에요.
      괄호는 쓰나 않쓰나 의미가 없는거죠ㅋ 그냥 (3) 이렇게 입력해도 3이 출력되는 것과 마찬가지라고 생각해주시면 될듯해요.

      뭔가 개운치 않군요ㅠㅠㅠㅠ

  5. 2010/03/23 17:30

    plot까지 했는데 그래프로 표현이 어떻게 되는지 모르겠어요..ㅠㅠ

    • 2010/03/26 14:10



      >> x=[-3:0.01:3];
      >> y=3.*x;
      >> plot(x,y)

      이렇게 입력해도 아무런 새 창이 뜨지 않나요??ㅠㅠ

  6. 2010/03/29 23:08

    정말 너무쉽게 가르켜줘서 고마워요. ㅎㅎ

  7. 2010/03/31 14:39

    쉽게 설명해주셔서 감사합니다..^^

  8. 2010/04/08 00:56

    쉽게 설명해 주셔서 감사합니다ㅋㅋ

    그런데 변수가 여러개인 그래프는 어떻게 그리나요?

    • 2010/04/08 09:29

      방문해주셔서 감사합니다ㅋ
      변수가 여러개일땐 3차원 그래프(5강)나, 혹은 4차원 데이터를 표현(14강)하는 형식에 대한 강의를 보시면 돼요ㅋ

  9. 2010/04/09 14:19

    자세하고 알기쉬운 설명 감동했어요-_ㅠ

  10. 2010/04/19 12:56

    비밀댓글입니다

    • 2010/04/19 14:50

      그래프를 다 그린 상태에서
      legend 부분을 그냥 마우스로 드래그 하셔서 오른쪽 아래로 가져다 놓으시면 됩니다ㅋ

    • 2010/04/20 09:53

      비밀댓글입니다

    • 2010/04/20 15:00

      매트랩 상에서 기본적으로 legend의 위치가 오른쪽 위로 지정되어 있기 때문이에요. m-file로 출력할 때마다 오른쪽 아래로 지정하시고 싶으시면 legend 명령어를 사용하실 때 위치를 지정해 주시면되는데, 다음과 같이 'Location','SouthEast'를 추가해주시면 되요.

      ex)
      >> legend('y=2*x','y=4.*x','Location','SouthEast')

    • 매트랩초보 수정/삭제> 댓글주소
      2010/04/21 11:01

      그런 방법이 잇엇군요
      이 방법 말고는 없나요 ???
      에휴 매트랩을 마스터하는 길이란 어렵네요 ㅜ.ㅜ
      정말 감사드려요 답변 해주셔서~ 앞으로도
      계속 강좌 보겟습니다 ^_^~~~수고해주세용

    • 2010/04/21 23:21

      감사합니다
      흠;; 다른방법이 있을지는 잘 모르겠네요..ㅠㅠㅠ

  11. 2010/04/30 02:45

    grid on 했을때, 그래프선이 나오지 않는데; plot으로 해줘야 하나요?? plot으로 표현하니 각 x, y 각 라벨 들 다 사라지고;;
    부탁 드리겠습니다..ㅠㅠ

    • 2010/04/30 09:32

      plot으로 그래프를 그리신 후
      그 그래프 창을 끄지 마시고
      그 상태로
      grid on, xlabel, ylabel, legend 등의 명령어를 써주시면 됩니다

  12. 2010/05/28 21:17

    님 짱 !!

  13. 2010/06/10 23:17

    x=-10을 y범위가 12에서 14까지만 나타내고 싶은데
    x=-10;
    y=12:0.0001:13;
    plot(x,y)
    이렇게 하니까 그래프 색이 이상하네요ㅠㅠㅠㅠ

    • 2010/06/11 12:19

      x도 행렬데이터로 입력해주시면 됩니다.
      y=12:0.1:13;
      x=ones(length(y),1)*(-10);
      plot(x,y)
      이렇게 해주시면 됩니다.

  14. 2010/08/17 15:29

    공대생을 위한 매트랩 강좌... 저한테 딱 맞네요... 감사드립니다!!! 잘보구 있어요!!

  15. 2010/08/27 02:04

    저를 위한 강좌네요..제가 바로 공대생이니깐요.!

    사랑합니다!

  16. 2010/09/02 10:40

    안녕하세요...

    그동안의 고민이었던 매트랩을 시작할 수 있게 해주셔서 너무 감사합니다.

    설명이 머리에 쏙쏙들어옵니다.

    논문에 많은 도움이 되겠습니다.

    감사합니다.

  17. 2010/09/03 13:09

    정말 잘 보고 배우고 갑니다. !!

  18. 2010/10/05 00:26

    noise 관련된 문제가 있어서요 혹시 내용강의가 있을까요 ㅠ

    • 2010/10/07 10:40

      ㅠㅠ필터쪽은 제전공이 아니라서
      http://blog.naver.com/horgan

      여기서 어쩌면 정보를 찾으실 수 있으실지도 모르겠네요..

  19. 2010/10/05 22:20

    알기쉽고 보기쉬운 강의 감사드려요!
    덕분에 과제도 샤샤샥 !!!!!!

  20. 2010/10/06 22:37

    너무너무 감사해요 잘 배웠습니다~!

  21. 2010/10/20 00:03

    정말 궁금한게 있는데 박스 밖에 그림이 삐져놨을때

    박스 안의 그림만 나타내게 하는 방법은 혹시 없나요?

  22. 2010/12/05 15:36

    비밀댓글입니다

    • 2010/12/23 14:34

      반대쪽에 그리는거는
      hold on되어있는 상태에서
      x,y 데이터를 바꿔서 plot(x,y)를 다시하시면 됩니다.

  23. 2010/12/15 21:27

    형님 .....진짜 최곱니다..ㅡㅜ 형님은 매틀랩 천사

  24. 2010/12/31 05:10

    완전......... 사랑해요! 강의가 더 있었으면 좋겠어요! rk4 요런것도 ........................................ 정말 메틀랩 교주님임!

  25. 2011/01/08 06:18

    요즘 첨으로 matlab을 배우는 사랍입니다. plotyy라는 함수를 쓸때 두개의 y축의 스케일을 따로 조절할수 있나요? 옵션으로 들어가봐도 하나만 조절이 가능한거 같아서 여쭙니다.

    • 2011/01/12 17:35

      간단해 보이지만 쉬운 문제는 아닙니다.

      예제를 들어보죠.

      x = 0:0.01:20;
      y1 = 200*exp(-0.05*x).*sin(x);
      y2 = 0.8*exp(-0.5*x).*sin(10*x);
      [AX,H1,H2] = plotyy(x,y1,x,y2,'plot');

      ylim(Ax(1),[-100 100])

      이렇게하면 왼쪽 축이 바껴 있을 것이고

      ylim(Ax(2),[-20 20])

      이렇게 하면 오른쪽 축이 바낄 것입니다.

      다만 이때 오른쪽 축의 경우는 data tick이 일치하지 않으므로

      http://engi-agora.tistory.com/38

      여길 참고하여 수정해주셔야 합니다.

  26. 2011/01/22 22:06

    강의 너무 센스있고 재밌네요 ^^ 정말 감사합니다 ^^

  27. 2011/03/27 11:34

    너무 감사합니다 ㅋㅋㅋ
    다른 매틀랩강의,책보다 훨씬도움되요
    최고

  28. 2011/04/12 15:19

    비밀댓글입니다

  29. 2011/05/04 00:33

    y=-(exp(-tau*x))/(sqrt(1-tau^2))*sin(sqrt(1-tau^2)*x+theta)+1
    이식을 썻는데 따로 분리해서 해보면 값이 나오는데 다같이 위와 같은 식처럼 입력을 하니
    ??? Error using ==> mtimes
    Inner matrix dimensions must agree. 이런 말이 뜨는데 이거 어떻게 된거에여 ㅠㅠ

  30. 2011/08/10 16:23

    올려주시는 자료가 정말 저한테 얼마나 도움이 되는지!
    너무 재밌고 필요한 부분만 가르쳐 주셔서 정말 좋습니다!
    책을 사놓고도 이 강의만 봅니다^^
    책내시면 2권사겠습니다 ㅋㅋㅋㅋㅋㅋㅋㅋ 정말절말 감사합니다! 최고

  31. 2011/08/25 21:54

    자료 너무나 감사합니다. 다름이 아니라 제가 256 바이 256 데이터를 컬러맵처럼 나타내고 싶은데요 정사각형에 displacement map처럼요 ㅠㅠ 이거 어떻게 하는지좀 여쭈어 봐도 될까요 ㅠㅠ

  32. 2011/12/05 03:11

    이거다....... 잘보고 갑니다.
    소스보고도 이해가 안되서 공부하고 있었는데 이런 마른하늘에 소나기같은 곳이!!

  33. 2012/03/12 11:33

    3by3행렬을 백터로 나타내는 matlab 출력해서, 이 백터를 2차원 그래프로 출력하려면 어떻게 해야 하나요?
    1 2 3
    4 5 6
    7 8 9
    이걸로 부탁 바랍니다.^^

  34. 2012/04/20 09:54

    이렇게 쉽게 설명이 되는건가요 너무 설명을 쉽게 잘 하십니다..

  35. 2013/02/07 21:40

    얼마전에 매트웍스 강의 들었다가 헛웃음만 지었지요. R2012b에선 클릭한번(+세부사항 지정)에 그래프를 생성하더라구요 ㅋㅋㅋ. 진정한 공대생이라면 텍스트로도 코딩할줄 알아야 디버깅을 쉽게하긴 하지만, ... '구현보다는 알고리즘 개발에 시간투자하는 것이 더 이득'이라는 강사분의 말이 와닿더라구요 ㅋ/ 근데.. 저 주전자 신기하네요 ㅎ

  36. 2013/02/12 15:13

    잘 배우고 있습니다.

  37. 2013/03/17 15:28

    잘 봤습니다. ㅎㅎ

  38. 2013/07/23 21:54

    명강의입니다.

  39. 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.

    이런 문제가 생깁니다

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

  40. 2013/10/30 00:24

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

  41. 2014/07/25 08:19

    잘 배우고 있습니다. ^^

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

티스토리 툴바