미국 공학박사 아빠의 코딩 연구소

다른 순간의 로봇 위치들 보여주기

이번에는 여러개의 작은 그래프들을 한번에 보여주는 방법을 공부해 볼까요?
이 강의 내용 또한, 저는 논문쓸 때 자주 사용한답니다.


강의들은 모두 무료입니다. 단, 저작권은 키클 코딩랩 에 있으며, 무단 복제 및 배포를 엄금합니다.
이를 어길 시, 본 사이트의 서버가 미국에 있으므로, 미국법에 의해 처벌될 수도 있습니다.




figure 만들기

자, 새로운 Python코딩을 하고자 하니, 새로운 Python파일을 만들어 볼까요?
먼저, "강의. 그래프 1 - 로봇 경로 만들기"에서 설명했던 것처럼 노틸러스에서 원하는 폴더를 생성하거나 이미 만들어 놓은 폴더로 들어가 보세요.
원하는 폴더 위치로 들어갔나요? 그럼 마우스 오른쪽 버튼으로 팝업메뉴를 열고, "Open in Terminal" 메뉴를 이용해서 터미널을 실행해 보세요.
그리고 아래와 같이 새로운 파일을 gedit 문서편집기를 이용해서 생성해 보지요.

이제 코딩을 해 보지요.
이번에도 그래프를 만들 거니까, matplotlib를 사용할 거예요. 그러면, "강의. 그래프 1 - 로봇 경로 만들기"에서 했던 것처럼, import를 이용해서 matplotlib의 pyplot 객체를 plt라는 별명을 통해 사용할 것이라고 선언해 보지요.
그리고 아래처럼, 로봇의 (x, y) 좌표 네 개를 리스트를 이용해서 정해 보지요.
이 네 개의 좌표들을 각각 네 개의 다른 그래프들에 보이게 만들 거랍니다.

리스트가 무엇인지는 이미 공부해 봤지요? 기억이 안 난다면, 문법 노트 가서 확인해 보세요.
문법 노트에 가기도 귀찮다면, 이번까지만 문법 노트를 가져다 놓을 테니 복습해 보세요...^^; 단, 이번이 마지막 이예요..

[문법] List

여러개의 그래프를 하나의 창에 동시에 보여 주려면, 먼저 figure를 만들어야 해요. figure는 그래프를 담는 창이라고 생각하면 되요.
figure가 무엇인지 직접 확인해 볼까요?
아래와 같이, pyplot객체의 figure() 함수를 이용해서 figure를 생성하고, 리턴값인 figure 객체를 fig라는 이름으로 받아 보지요.
그리고, figure를 보여주도록 pyplot객체의 show()함수를 호출해 보지요.

위 코드를 실행해 볼까요? 어떻게 실행하는지 기억하나요?
저장한 후, 아래처럼 터미널에서 python3 를 이용하면 되지요? 기억이 안난다면, 여기에서 복습해 보아요.

실행하면, 아래 그림처럼 그냥 빈 창이 하나 열리죠? 이것이 바로 figure예요.
이 figure 안에 네 개의 그래프를 넣을 거랍니다.




subplot 만들기

하나의 figure 안에 여러개의 그래프를 만들때, 각 그래프를 subplot이라고 불러요.
그래서 figure 안에 그래프를 추가하는 함수의 이름도 figure 객체의 add_subplot() 함수랍니다.
자, 첫 번째 그래프를 삽입해 볼까요?
우리는 네 개의 로봇 좌표를 각각 그래프에 그릴 거니까, 네 개의 그래프가 필요하겠죠?
단, 네 개의 그래프를 두 개씩 두줄에 걸쳐저 만들어 볼게요.
아래와 같이 줄8을 새로 코딩해 볼게요.

add_subplot() 함수는 figure 객체의 함수예요. 그래서 fig.add_subplot() 이라고 코딩한답니다.
add_subplot() 함수의 argument "221"이 의미하는 것은 그래프 두개씩 두줄에 걸쳐 만드는데, 그 중에 첫 번째 ("1") 그래프 라는 의미예요.
마지막으로 add_subplot() 함수는 그래프의 축 객체를 리턴한답니다. 그래서 리턴값을 받는 변수 이름을 axis (축)의 ax를 이용해서 정했어요.

자, 첫 번째 그래프에 로봇의 첫 번째 좌표를 그리기로 했죠?
앞서 "강의. 그래프 1 - 로봇 경로 만들기"에서 공부했던, plot()함수를 이용해 봅시다.
아래의 줄9와 같이, 첫 번째 좌표 (x[0], y[0])를 파랑색 ("b")의 네모 마커 ("s")를 이용하되, 크기를 10으로 해서 그리겠다고 코딩해 보지요.
이번에 plot() 함수를 이용하면서 다른 점은, plot() 함수를 호출하기 위해서 pyplot 객체가 아닌 axis객체를 통해서 호출했다는 것이예요. 단, 사용법은 동일하답니다.
주목할 점은 "강의. 그래프 1 - 로봇 경로 만들기"에서는 color="blue", marker="s" 라는 방식으로 마커를 설정했는데요. 이 방식 말고 색상의 앞 글자 "b"와 네모 마커를 의미하는 "s"를 합쳐서 "bs"로 설정해도 된다는 점 기억하세요. 다른 색상들은 한 글자로 어떻게 표현하는지, 라이브러리 노트에서 꼭 확인해 보세요.

위 코드를 실행해 보면, 아래와 같이 figure의 왼쪽 상단에 첫 번째 그래프가 추가된 것을 볼 수 있어요.

그러면, 나머지 그래프들도 같은 방식으로 추가해 볼까요?
아래에서 보듯이, 각 로봇 좌표들을 구분하기 위해서 다른 색상들 (r, c, m)을 사용했답니다. 그리고, 두 번째 로봇 좌표들은 인덱스 번호 "1", 즉 (x[1], y[1]), 세 번째 로봇 좌표들은 "2", 즉 (x[2], y[2]),를 사용한 것 잊지 마세요.

위 코드를 실행해 보면, 아래와 같이 하나의 figure에 네 개의 그래프들이 동시에 보이는 것을 확인할 수 있어요.




마무리 작업

위 figure를 보면, 문제가 하나 있네요.
로봇 좌표들이 원래는 다 다른데, 그래프에서는 모두 정중앙에 위치해서 모두 같아 보이네요.
고쳐 볼까요?

먼저, 각 축의 범위를 정해 보지요.
"강의. 그래프 1 - 로봇 경로 만들기"에서는 pyplot 객체의 xlim()과 ylim() 함수들을 사용했었죠?
이번 강의에서는, 아래의 줄10과 줄11에 보이듯이 axis 객체의 set_xlim()와 set_ylim()함수를 사용할 거예요.
주목할 점은 축 범위의 최소값과 최대값을 리스트 형태로 전달했다는 것이에요. 즉, [최소값, 최대값] 형태인 것이죠.

다음으로 subplot에 제목을 붙여 보지요.
줄12에서와 같이 axis객체의 set_title()함수를 사용하는데요. 첫 번째 subplot에는 첫 번째 로봇의 위치가 표시 되니, "time=1"이라는 문자열을 전달해 보지요.

자, 이제 subplot 2~4에도 위에서 한 것과 같은 방식으로 축 범위를 같은 최소값/최대값으로 정해 보세요. 각 subplot의 제목에는 로봇 위치 시각이 증가하도록 해보구요.
아래 코드를 참고해서 완성해 보아요.

이제 완성된 위 코드를 실행해 볼까요?
결과로 만들어지는 그래프는 아래와 같답니다. 각 시간별로 로봇의 위치가 달라지는 것이 확연히 보이지요?

다음에는 로봇의 위치들을 보여주는 동영상을 만들어 보는 기회도 갖도록 해볼게요.

강의에서 작성된 소스 코드 (source code)를 다운받으려면, 다음 링크를 클릭하세요: 소스 코드 다운로드
혹시, 이해가 잘 안되는 부분에 대한 질문이 있거나 다루어 줬으면 하는 주제가 있으면, 화면 오르쪽 하단에 "질문하기" 버튼을 이용해 주세요.






발자취

2019-09-11 "키클 코딩랩 - 미국 공학박사 아빠의 코딩 연구소"로 이름 변경
2019-06-28 코딩 교실 공개
2019-03-18 코딩 교실 제작 시작

바로가기
About
Contact
Privacy Policy
강의목록
질문하기
처음으로