[python] matplotlib

About_work·2024년 2월 17일
0

python 기초

목록 보기
34/65

matplotlib.pyplot as plt

plt.ion()

  • 이 줄은 Matplotlib의 대화형 모드를 활성화
  • 대화형 모드에서는 plt.show()를 호출하지 않아도 차트가 자동으로 화면에 나타남
  • 이는 특히 GUI 애플리케이션에서 유용하며, 사용자 상호작용에 따라 실시간으로 그래프를 업데이트할 수 있음

matplotlib.use('TkAgg')

  • 이 명령은 Matplotlib의 백엔드를 'TkAgg'로 설정
  • Matplotlib는 다양한 백엔드를 지원하여 다양한 환경에서 그래프를 그릴 수 있음
  • 'TkAgg'는 Tkinter GUI 툴킷을 사용하여 그래프를 그리는 데 사용되며, 이는 Python에서 가장 일반적으로 사용되는 GUI 툴킷 중 하나
  • Windows: 보통 TkAgg가 기본 백엔드로 사용됩니다.
  • macOS: MacOSX 백엔드가 기본적으로 사용될 수 있습니다.
  • Linux: TkAgg, GTK3Agg, Qt5Agg 중 하나가 기본 백엔드로 설정될 수 있습니다. 사용 가능한 GUI 툴킷에 따라 달라집니다.

plt.subplots

  • self.fig, self.axs = plt.subplots(2, 2)
    • 이 줄은 2x2의 그리드(총 4개의 서브플롯)를 가진 그래픽 창을 생성
    • plt.subplots 함수는 그래픽 창(figure)과 서브플롯의 배열(axes)을 반환
      • 이 서브플롯의 배열(axes)은 생성된 서브플롯들을 참조하는 데 사용
    • 함수 파라미터:
      • 첫 번째 파라미터: nrows(행의 수) - 2
      • 두 번째 파라미터: ncols(열의 수) - 2
    • 반환 값: fig (Figure 객체), axs (서브플롯 Axes 객체의 배열).

import matplotlib.pyplot as plt
self.fig, self.ax = plt.subplots(subplot_kw={'projection': '3d'})
  • 3D 그래프를 그리기 위한 준비 작업
  • 3D 그래프를 그릴 수 있는 그림(figure)과 축(axes) 객체를 생성
  • 이 코드는 객체 지향 인터페이스(https://velog.io/@jk01019/객체-지향-인터페이스)를 사용하여 3D 플롯을 생성하는 방법의 한 예

  • self.fig, self.ax = plt.subplots(...): plt.subplots

파라미터:

  • subplot_kw:
    • 서브플롯(축) 생성에 사용될 키워드 인자들을 담은 dctionary
    • 여기서는 'projection': '3d'를 전달
      • 생성되는 서브플롯(축 ax)이 3차원 플로팅을 위한 축임을 지정
      • ax에 대해 plot, scatter, bar 등의 3D 버전 메소드를 사용할 수 있습니다.
      • 3D 플롯을 마우스로 드래그하여 다른 각도에서 시각화할 수 있는 기능을 제공

리턴 값:

  • self.fig:
    • 그림 객체로, 전체 그래프의 컨테이너 역할
    • 이 객체를 사용하여 그래프의 제목, 크기, 저장 등의 속성을 조작
  • self.ax:
    • 축 객체로, 실제로 데이터를 플로팅하는 데 사용
    • 3D 그래프의 경우, 이 축 객체는 3D 공간 내에서 데이터를 플로팅하고, 회전, 줌 등의 3D 관련 조작을 가능하게 함

self.ax_pc = self.fig.add_subplot(2, 2, (3, 4), projection='3d')

  • 앞서 생성된 그래픽 창에 3D 서브플롯을 추가
  • add_subplot 함수를 사용하여 2x2 그리드의 3번째와 4번째 위치(즉, 전체 하단 부분)에 걸쳐 있는 하나의 큰 서브플롯을 생성
  • 이 서브플롯은 3D 데이터를 시각화하기 위해 '3d' 프로젝션을 사용
  • 함수 파라미터:
    • 첫 번째와 두 번째 파라미터: 그리드의 크기를 지정하는데 이미 subplots를 통해 설정되었으므로 여기서는 위치 지정에만 사용됩니다.
    • 세 번째 파라미터: 서브플롯이 위치할 그리드 위치, 여기서는 (3, 4)로, 하단 전체를 차지합니다.
    • projection='3d': 3D 그래프를 그리기 위한 설정.
  • 반환 값:
    • ax_pc (3D 서브플롯의 Axes 객체).

self.ax_pc.set_xlabel('X Label'), self.ax_pc.set_ylabel('Y Label'), self.ax_pc.set_zlabel('Z Label')

  • 이 세 줄은 3D 서브플롯의 x, y, z 축에 각각 라벨을 설정합니다. 이를 통해 축을 식별하기 쉽게 만들고, 데이터의 차원을 명확히 할 수 있습니다.

plt.pause()

  • matplotlibplt.pause(interval) 함수는 시각화 업데이트를 위해 주로 사용되며, 여기서 interval은 초 단위로 지정

이 함수는 두 가지 주요 목적

  1. 그래픽 업데이트:
  • matplotlib을 사용하여 그래프나 시각적 요소를 동적으로 업데이트할 때,
  • plt.pause(interval)는 지정된 시간 동안 실행을 일시 중지하여 그래프 창의 이벤트 루프가 처리될 시간을 제공
  • 이는 새로운 데이터 포인트를 추가하거나, 그래프의 모양을 변경하는 등의 업데이트가 화면에 반영될 수 있도록
  • plt.pause() 없이 연속적으로 그래프를 업데이트하려고 할 경우,
    • 사용자 인터페이스가 업데이트되지 않거나, 그래프 창이 응답하지 않는 등의 문제가 발생할 수 있음
  1. 비동기 처리와 사용자 인터랙션:
  • plt.pause(interval)는 지정된 시간 동안 프로그램의 실행을 일시 중지하고,

  • 이 기간 동안 matplotlib 그래픽 엔진이 다른 이벤트(예: 창 크기 조절, 그래프 확대/축소, 마우스 클릭 등)를 처리할 수 있게 합니다.

  • 이는 사용자가 그래픽 창과 상호작용할 수 있는 기회를 제공하며, 이벤트 기반의 프로그래밍에서 중요한 부분

  • plt.pause(0.1)에서 0.1은 0.1초 동안 프로그램을 일시 중지하라는 의미

  • 이 짧은 시간 동안에도 matplotlib은 충분히 그래픽 창을 업데이트하고 사용자 이벤트를 처리할 수 있음

  • 이 방식은 실시간 데이터 시각화애니메이션 효과를 구현할 때 유용하게 사용

  • 그러나, 이 함수는 주로 대화형 모드에서 사용되며, 스크립트나 대규모 데이터 처리에는 다른 접근 방식(예: 애니메이션 모듈 사용)이 권장

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글