인터랙티브 피규어 #

데이터로 작업할 때 상호 작용은 매우 중요할 수 있습니다. Matplotlib GUI 창에 내장된 팬/줌 및 마우스 위치 도구로도 충분하지만 이벤트 시스템을 사용하여 맞춤형 데이터 탐색 도구를 구축할 수도 있습니다.

Matplotlib 는 여러 GUI 툴킷(Qt, Tk, Wx, GTK, macOS, JavaScript)에 대한 백엔드 바인딩과 함께 제공되며 타사 패키지는 kivyJupyter Lab 에 대한 바인딩을 제공 합니다. Figure가 마우스, 키보드 및 페인트 이벤트에 반응하려면 GUI 이벤트 루프를 대화형 프롬프트와 통합해야 합니다. IPython을 사용하는 것이 좋습니다( 아래 참조 ).

pyplot모듈은 대화형 도구, 도구 모음, 도구 설명 및 키 바인딩 을 포함하는 그림을 명시적으로 생성하기 위한 기능을 제공합니다 .

pyplot.figure

비어 있는 새 도형을 만들 Figure거나 기존 도형을 선택합니다.

pyplot.subplots

새 항목을 만들고 Figure그리드로 채웁니다.Axes

pyplot를 통해 액세스할 수 있는 "The Current Figure" pyplot.gcf개념과 를 통해 액세스할 수 있는 "The Current Axes" 개념이 있습니다 pyplot.gca. 의 거의 모든 함수는 적절하게 현재 / 를 pyplot통과 (또는 생성)합니다.FigureAxes

pyplot.figureMatplotlib는 또는 를 통해 생성된 모든 열린 그림에 대한 참조를 유지 pyplot.subplots하므로 그림이 가비지 수집되지 않습니다. s는 다음 을 통해 개별적 Figure으로 닫고 등록 취소할 수 있습니다 . 모든 open 은 를 통해 닫을 수 있습니다 .pyplotpyplot.closeFigureplt.close('all')

Matplotlib의 이벤트 시스템 및 통합 이벤트 루프에 대한 자세한 내용은 다음을 참조하십시오.

IPython 통합 #

대화형 셸에 IPython을 사용하는 것이 좋습니다. 모든 기능(개선된 탭 완성, 마법, 여러 줄 편집 등) 외에도 GUI 툴킷 이벤트 루프가 명령줄과 제대로 통합되도록 합니다( 명령 프롬프트 통합 참조 ).

이 예제에서는 IPython 프롬프트를 통해 그림을 만들고 수정합니다. 그림은 QtAgg GUI 창에 표시됩니다. 통합을 구성하고 대화식 모드%matplotlib 를 활성화하려면 마법 을 사용하십시오 .

In [1]: %matplotlib
Using matplotlib backend: QtAgg

In [2]: import matplotlib.pyplot as plt

새 Figure 창을 만듭니다.

In [3]: fig, ax = plt.subplots()

창에 데이터의 선 그림을 추가합니다.

In [4]: ln, = ax.plot(range(5))

선 색상을 파란색에서 주황색으로 변경합니다.

In [5]: ln.set_color('orange')

플롯의 자동 다시 그리기를 비활성화하려면 다음을 수행하십시오.

In [6]: plt.ioff()

플롯의 자동 다시 그리기를 다시 활성화하려면 다음을 수행하십시오.

In [7]: plt.ion()

Matplotlib및 의 최신 버전에서는 IPython를 가져 matplotlib.pyplot오고 호출 하는 것으로 충분합니다 pyplot.ion. 마법을 사용하는 %것은 모든 버전의 Matplotlib 및 IPython에서 작동하도록 보장됩니다.

대화식 모드 #

pyplot.ion

대화형 모드를 활성화합니다.

pyplot.ioff

대화형 모드를 비활성화합니다.

pyplot.isinteractive

모든 플로팅 명령 후에 플롯이 업데이트되는지 여부를 반환합니다.

pyplot.show

열려 있는 모든 Figure를 표시합니다.

pyplot.pause

간격 초 동안 GUI 이벤트 루프를 실행합니다 .

대화형 모드 컨트롤:

  • 생성된 도형 자동 표시 여부

  • 아티스트에 대한 변경 사항이 기존 그림 다시 그리기를 자동으로 트리거하는지 여부

  • 인수가 주어지지 않은 경우 pyplot.show()반환할 때: 즉시 또는 모든 수치가 닫힌 후

대화형 모드인 경우:

  • 새로 생성된 수치가 즉시 표시됩니다.

  • 요소가 변경되면 그림이 자동으로 다시 그려집니다.

  • pyplot.show()수치를 표시하고 즉시 반환

대화식 모드가 아닌 경우:

비대화형 모드에 있는 경우(또는 비대화형 모드에서 만든 Figure) pyplot.show 화면에 창을 표시하려면 명시적으로 호출해야 할 수 있습니다. 고정된 시간 동안만 GUI 이벤트 루프를 실행하려는 경우 pyplot.pause. 이렇게 하면 를 호출한 것처럼 코드의 진행이 차단되고 time.sleep, 현재 창이 표시되고 필요한 경우 다시 그려지고, 지정된 기간 동안 GUI 이벤트 루프가 실행됩니다.

명령 프롬프트와 통합되는 GUI 이벤트 루프와 대화형 모드에 있는 그림은 서로 독립적입니다. 이벤트 루프 통합 을 사용 pyplot.ion하지만 준비하지 않은 경우 그림이 나타나지만 프롬프트가 입력을 기다리는 동안 대화형이 되지 않습니다. 이동/확대/축소할 수 없으며 그림이 렌더링되지 않을 수도 있습니다(창이 검은색, 투명 또는 그 아래 바탕 화면의 스냅샷으로 나타날 수 있음). 반대로 이벤트 루프 통합을 구성하면 pyplot의 "대화식 모드"에 관계없이 프롬프트에서 입력을 기다리는 동안 표시된 수치가 응답합니다.

대화형 모드 설정과 이벤트 루프 통합의 조합에 상관없이 , 를 사용하거나 다른 방식으로 GUI 메인 루프를 실행하면 Figure가 반응 pyplot.show(block=True)합니다 pyplot.pause.

경고

이를 사용 Figure.show하면 이벤트 루프를 시작하지 않고 대화형 모드에 있지 않고 화면에 그림을 표시할 수 있습니다. 이는 작동할 수 있지만(GUI 툴킷에 따라 다름) 응답하지 않는 그림이 나타날 수 있습니다.

기본 UI #

에서 만든 창 pyplot에는 탐색 버튼이 있는 대화형 도구 모음과 커서가 가리키는 데이터 값의 판독값이 있습니다. 여러 가지 유용한 키 바인딩이 기본적으로 등록됩니다.

다른 파이썬 프롬프트 #

대화형 모드는 기본 Python 프롬프트에서 작동합니다.

>>> import matplotlib.pyplot as plt
>>> plt.ion()
>>>

그러나 이것은 이벤트 후크가 제대로 설치되었는지 확인하지 못하며 Figure가 응답하지 않을 수 있습니다. 자세한 내용은 GUI 툴킷 설명서를 참조하십시오.

Jupyter 노트북 / JupyterLab #

메모

여기에 설명된 대화형 기능을 사용하려면 대화형 백엔드를 사용해야 합니다. 노트북의 기본 백엔드인 인라인 백엔드는 그렇지 않습니다. backend_inline 그림을 한 번 렌더링하고 셀이 실행될 때 노트북에 정적 이미지를 삽입합니다. 이미지는 정적이기 때문에 이동/확대/축소하거나 사용자 입력을 받거나 다른 셀에서 업데이트할 수 없습니다.

'클래식' 노트북 또는 Jupyter 랩에서 대화형 그림을 얻으려면 ipywidget 프레임워크를 사용하는 ipympl 백엔드 (별도로 설치해야 함)를 사용하십시오 . 설치된 경우 마법을 사용하십시오.ipympl

%matplotlib widget

선택하고 활성화합니다.

클래식 노트북만 사용해야 하는 경우 다음을 사용할 수 있습니다.

%matplotlib notebook

backend_nbaggMatplotlib에서 제공 하는 백엔드를 사용합니다 . 그러나 nbagg는 Jupyter Lab에서 작동하지 않습니다.

GUI + Jupyter #

ipymplJupyter 노트북에서 GUI 가 아닌 백엔드 중 하나를 사용할 수도 있습니다 . Jupyter 커널을 로컬에서 실행하는 경우 GUI 창이 웹 브라우저에 인접한 바탕 화면에 생성됩니다. 원격 서버에서 노트북을 실행하면 커널이 원격 컴퓨터에서 GUI 창을 열려고 시도합니다. xserver를 데스크탑으로 다시 전달하도록 설정하지 않은 경우 창을 보거나 상호 작용할 수 없습니다. 예외가 발생할 수도 있습니다.

파이참, 스파이더, VSCode #

많은 IDE에는 Matplotlib과의 통합 기능이 내장되어 있습니다. 자세한 구성 정보는 해당 설명서를 참조하십시오.