백엔드 #

백엔드란 무엇입니까? #

웹사이트와 메일링 리스트에 있는 많은 문서가 "백엔드"를 언급하며 많은 신규 사용자가 이 용어를 혼동합니다. Matplotlib는 다양한 사용 사례와 출력 형식을 대상으로 합니다. 어떤 사람들은 Python 셸에서 대화식으로 Matplotlib를 사용하고 명령을 입력할 때 플로팅 창이 팝업되도록 합니다. 어떤 사람들 은 빠른 데이터 분석을 위해 Jupyter 노트북을 실행하고 인라인 플롯을 그립니다. 다른 사람들은 Matplotlib를 PyQt 또는 PyGObject와 같은 그래픽 사용자 인터페이스에 내장하여 풍부한 애플리케이션을 구축합니다. 일부 사람들은 배치 스크립트에서 Matplotlib를 사용하여 수치 시뮬레이션에서 포스트스크립트 이미지를 생성하고 다른 사람들은 웹 애플리케이션 서버를 실행하여 동적으로 그래프를 제공합니다.

이러한 모든 사용 사례를 지원하기 위해 Matplotlib는 다양한 출력을 대상으로 할 수 있으며 이러한 각 기능을 백엔드라고 합니다. "프론트엔드"는 사용자 대면 코드, 즉 플로팅 코드인 반면 "백엔드"는 그림을 만들기 위해 배후에서 모든 힘든 작업을 수행합니다. 두 가지 유형의 백엔드가 있습니다: 사용자 인터페이스 백엔드(PyQt/PySide, PyGObject, Tkinter, wxPython 또는 macOS/Cocoa에서 사용); "대화형 백엔드"라고도 함) 및 이미지 파일을 만들기 위한 하드카피 백엔드(PNG, SVG, PDF, PS; "비대화형 백엔드"라고도 함).

백엔드 선택 #

백엔드를 구성하는 세 가지 방법이 있습니다.

아래는 좀 더 자세한 설명입니다.

둘 이상의 구성이 있는 경우 목록의 마지막 구성이 우선합니다. 예를 들어 호출 matplotlib.use()하면 matplotlibrc.

백엔드를 명시적으로 설정하지 않으면 Matplotlib는 시스템에서 사용 가능한 항목과 GUI 이벤트 루프가 이미 실행 중인지 여부에 따라 사용 가능한 백엔드를 자동으로 감지합니다. 다음 목록에서 사용 가능한 첫 번째 백엔드가 선택됩니다: MacOSX, QtAgg, GTK4Agg, Gtk3Agg, TkAgg, WxAgg, Agg. 마지막 Agg는 파일에만 쓸 수 있는 비대화형 백엔드입니다. Matplotlib가 X 디스플레이 또는 Wayland 디스플레이에 연결할 수 없는 경우 Linux에서 사용됩니다.

구성 방법에 대한 자세한 설명은 다음과 같습니다.

  1. rcParams["backend"]파일 에서 설정 matplotlibrc:

    backend : qtagg   # use pyqt with antigrain (agg) rendering
    

    스타일 시트 및 rcParams로 Matplotlib 사용자 지정 도 참조하십시오 .

  2. 설정MPLBACKEND환경 변수:

    현재 셸 또는 단일 스크립트에 대한 환경 변수를 설정할 수 있습니다.

    유닉스에서:

    > export MPLBACKEND=qtagg
    > python simple_plot.py
    
    > MPLBACKEND=qtagg python simple_plot.py
    

    Windows에서는 전자만 가능합니다.

    > set MPLBACKEND=qtagg
    > python simple_plot.py
    

    이 환경 변수를 설정하면 현재 작업 디렉토리에 가 있더라도 anybackend 의 매개 변수를 무시합니다. 따라서 설정 matplotlibrcmatplotlibrcMPLBACKEND 전역적으로(예: your .bashrc또는 .profile)는 직관적이지 않은 동작으로 이어질 수 있으므로 사용하지 않는 것이 좋습니다.

  3. 스크립트가 특정 백엔드에 의존하는 경우 다음 기능을 사용할 수 있습니다 matplotlib.use().

    import matplotlib
    matplotlib.use('qtagg')
    

    Figure가 생성되기 전에 이 작업을 수행해야 합니다. 그렇지 않으면 Matplotlib가 백엔드를 전환하지 못하고 ImportError가 발생할 수 있습니다.

    use사용자가 다른 백엔드를 사용하려는 경우 사용하려면 코드를 변경해야 합니다 . 따라서 반드시 필요한 경우가 아니면 명시적으로 호출 use하지 않아야 합니다.

빌트인 백엔드 #

기본적으로 Matplotlib는 화면 및/또는 파일에 대한 출력과 함께 대화형 작업과 스크립트에서 플로팅을 모두 허용하는 기본 백엔드를 자동으로 선택해야 하므로 적어도 처음에는 백엔드에 대해 걱정할 필요가 없습니다. 가장 일반적인 예외는 Python 배포판이 없이 제공 tkinter되고 다른 GUI 툴킷이 설치되어 있지 않은 경우입니다. 이것은 명명된 python-tk(또는 유사한) Linux 패키지를 설치해야 하는 특정 Linux 배포판에서 발생합니다.

그러나 그래픽 사용자 인터페이스 또는 웹 응용 프로그램 서버( 웹 응용 프로그램 서버(Flask)에 임베딩) 를 작성하고 싶거나 진행 상황을 더 잘 이해해야 하는 경우 계속 읽으십시오. 그래픽 사용자 인터페이스에 대해 보다 쉽게 ​​사용자 정의할 수 있도록 하기 위해 Matplotlib는 렌더러(실제로 그림을 그리는 것)의 개념을 캔버스(그림이 가는 곳)에서 분리합니다. 사용자 인터페이스용 정식 렌더러 는 그림의 래스터(픽셀) 이미지를 만들기 위해 Anti-Grain Geometry C++ 라이브러리를 사용 Agg합니다 . QtAgg, GTK4Agg, GTK3Agg, wxAgg, TkAggmacosx백엔드 에서 사용됩니다 . 대체 렌더러는 에서 사용하는 Cairo 라이브러리를 기반으로 합니다 QtCairo.

렌더링 엔진의 경우 사용자는 벡터 또는 래스터 렌더러 를 구분할 수도 있습니다 . 벡터 그래픽 언어는 "이 지점에서 이 지점으로 선을 그립니다"와 같은 그리기 명령을 실행하므로 축척이 없습니다. 래스터 백엔드는 정확도가 DPI 설정에 따라 달라지는 라인의 픽셀 표현을 생성합니다.

다음은 Matplotlib 렌더러에 대한 요약 입니다 .

렌더러

파일 형식

설명

AGG

png

래스터 그래픽 - Anti-Grain Geometry 엔진 을 사용하는 고품질 이미지 .

PDF

pdf

벡터 그래픽 -- Portable Document Format 출력.

추신

추신, 엡

벡터 그래픽 -- PostScript 출력.

SVG

SVG

벡터 그래픽 -- 확장 가능한 벡터 그래픽 출력.

PGF

pgf, pdf

벡터 그래픽 -- pgf 패키지 사용.

카이로

png, ps, pdf, svg

래스터 또는 벡터 그래픽 -- Cairo 라이브러리 사용( pycairo 또는 cairocffi 필요 ).

비대화형 백엔드를 사용하여 플롯을 저장하려면 이 matplotlib.pyplot.savefig('filename')방법을 사용하십시오.

다음은 지원되는 사용자 인터페이스 및 렌더러 조합입니다. 이들은 대화형 백엔드 이며 화면에 표시하고 위 ​​표의 적절한 렌더러를 사용하여 파일에 쓸 수 있습니다.

백엔드

설명

QtAgg

Qt 캔버스 에서 Agg 렌더링 ( PySide라고도 하는 Python용 PyQt 또는 Qt 필요). 이 백엔드는 IPython에서 .%matplotlib qt

아이피플

Jupyter 위젯에 포함된 Agg 렌더링( ipympl 필요 ). 이 백엔드는 Jupyter 노트북에서 활성화할 수 있습니다 .%matplotlib ipympl

GTK3Agg

GTK 3.x 캔버스 로 Agg 렌더링 ( PyGObjectpycairo 필요 ). 이 백엔드는 IPython에서 .%matplotlib gtk3

GTK4Agg

GTK 4.x 캔버스 로 Agg 렌더링 ( PyGObjectpycairo 필요 ). 이 백엔드는 IPython에서 .%matplotlib gtk4

맥 OS X

OSX에서 Cocoa 캔버스로의 Agg 렌더링. 이 백엔드는 IPython에서 .%matplotlib osx

TkAgg

Tk 캔버스 에 대한 Agg 렌더링 ( TkInter 필요 ). 이 백엔드는 IPython에서 .%matplotlib tk

nbAgg

Jupyter 클래식 노트북에 대화형 그림을 삽입합니다. 이 백엔드는 를 통해 Jupyter 노트북에서 활성화할 수 있습니다 .%matplotlib notebook

WebAgg

On show()은 대화형 그림으로 토네이도 서버를 시작합니다.

GTK3카이로

GTK 3.x 캔버스 로 렌더링하는 카이로 ( PyGObjectpycairo 필요 ).

GTK4카이로

GTK 4.x 캔버스 로 렌더링하는 카이로 ( PyGObjectpycairo 필요 ).

wxAgg

wxWidgets 캔버스 에 Agg 렌더링 ( wxPython 4 필요). 이 백엔드는 IPython에서 .%matplotlib wx

메모

내장 백엔드의 이름은 대소문자를 구분하지 않습니다. 예를 들어 'QtAgg'와 'qtagg'는 동일합니다.

# _

Jupyter 위젯 생태계는 Matplotlib에서 직접 지원하기에는 너무 빠르게 움직이고 있습니다. ipympl을 설치하려면:

pip install ipympl

또는

conda install ipympl -c conda-forge

자세한 내용은 ipympl 설치 를 참조하십시오.

Qt 구현을 어떻게 선택합니까? #

QtAgg 및 QtCairo 백엔드는 Qt 5 및 6과 Python 바인딩( PyQt 또는 Qt for Python , PySide라고도 함)을 모두 지원합니다. 바인딩이 이미 로드된 경우 Qt 백엔드에 사용됩니다. 그렇지 않으면 PyQt6, PySide6, PyQt5, PySide2 순서로 사용 가능한 첫 번째 바인딩이 사용됩니다.

그만큼QT_API아무것도 로드되지 않은 경우 검색을 재정의하도록 환경 변수를 설정할 수 있습니다. (대소문자를 구분하지 않고) PyQt6, PySide6, PyQt5 또는 PySide2로 설정하여 사용할 버전과 바인딩을 선택할 수 있습니다. 선택한 구현을 사용할 수 없는 경우 Qt 백엔드는 다른 Qt 구현을 시도하지 않고 로드에 실패합니다. 자세한 내용은 Qt 바인딩 을 참조하십시오.

내장되지 않은 백엔드 사용 #

보다 일반적으로 위의 방법 중 하나를 사용하여 가져올 수 있는 백엔드를 선택할 수 있습니다. name.of.the.backend백엔드를 포함하는 모듈인 경우 module://name.of.the.backend백엔드 이름으로 사용합니다(예: matplotlib.use('module://name.of.the.backend').