백엔드 #
백엔드란 무엇입니까? #
웹사이트와 메일링 리스트에 있는 많은 문서가 "백엔드"를 언급하며 많은 신규 사용자가 이 용어를 혼동합니다. Matplotlib는 다양한 사용 사례와 출력 형식을 대상으로 합니다. 어떤 사람들은 Python 셸에서 대화식으로 Matplotlib를 사용하고 명령을 입력할 때 플로팅 창이 팝업되도록 합니다. 어떤 사람들 은 빠른 데이터 분석을 위해 Jupyter 노트북을 실행하고 인라인 플롯을 그립니다. 다른 사람들은 Matplotlib를 PyQt 또는 PyGObject와 같은 그래픽 사용자 인터페이스에 내장하여 풍부한 애플리케이션을 구축합니다. 일부 사람들은 배치 스크립트에서 Matplotlib를 사용하여 수치 시뮬레이션에서 포스트스크립트 이미지를 생성하고 다른 사람들은 웹 애플리케이션 서버를 실행하여 동적으로 그래프를 제공합니다.
이러한 모든 사용 사례를 지원하기 위해 Matplotlib는 다양한 출력을 대상으로 할 수 있으며 이러한 각 기능을 백엔드라고 합니다. "프론트엔드"는 사용자 대면 코드, 즉 플로팅 코드인 반면 "백엔드"는 그림을 만들기 위해 배후에서 모든 힘든 작업을 수행합니다. 두 가지 유형의 백엔드가 있습니다: 사용자 인터페이스 백엔드(PyQt/PySide, PyGObject, Tkinter, wxPython 또는 macOS/Cocoa에서 사용); "대화형 백엔드"라고도 함) 및 이미지 파일을 만들기 위한 하드카피 백엔드(PNG, SVG, PDF, PS; "비대화형 백엔드"라고도 함).
백엔드 선택 #
백엔드를 구성하는 세 가지 방법이 있습니다.
파일 의
rcParams["backend"]
매개변수matplotlibrc
그만큼
MPLBACKEND
환경 변수
아래는 좀 더 자세한 설명입니다.
둘 이상의 구성이 있는 경우 목록의 마지막 구성이 우선합니다. 예를 들어 호출 matplotlib.use()
하면 matplotlibrc
.
백엔드를 명시적으로 설정하지 않으면 Matplotlib는 시스템에서 사용 가능한 항목과 GUI 이벤트 루프가 이미 실행 중인지 여부에 따라 사용 가능한 백엔드를 자동으로 감지합니다. 다음 목록에서 사용 가능한 첫 번째 백엔드가 선택됩니다: MacOSX, QtAgg, GTK4Agg, Gtk3Agg, TkAgg, WxAgg, Agg. 마지막 Agg는 파일에만 쓸 수 있는 비대화형 백엔드입니다. Matplotlib가 X 디스플레이 또는 Wayland 디스플레이에 연결할 수 없는 경우 Linux에서 사용됩니다.
구성 방법에 대한 자세한 설명은 다음과 같습니다.
rcParams["backend"]
파일 에서 설정matplotlibrc
:backend : qtagg # use pyqt with antigrain (agg) rendering
스타일 시트 및 rcParams로 Matplotlib 사용자 지정 도 참조하십시오 .
설정
MPLBACKEND
환경 변수:현재 셸 또는 단일 스크립트에 대한 환경 변수를 설정할 수 있습니다.
유닉스에서:
> export MPLBACKEND=qtagg > python simple_plot.py > MPLBACKEND=qtagg python simple_plot.py
Windows에서는 전자만 가능합니다.
> set MPLBACKEND=qtagg > python simple_plot.py
이 환경 변수를 설정하면 현재 작업 디렉토리에 가 있더라도 any
backend
의 매개 변수를 무시합니다. 따라서 설정matplotlibrc
matplotlibrc
MPLBACKEND
전역적으로(예: your.bashrc
또는.profile
)는 직관적이지 않은 동작으로 이어질 수 있으므로 사용하지 않는 것이 좋습니다.스크립트가 특정 백엔드에 의존하는 경우 다음 기능을 사용할 수 있습니다
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
, TkAgg
및
macosx
백엔드 에서 사용됩니다 . 대체 렌더러는 에서 사용하는 Cairo 라이브러리를 기반으로 합니다 QtCairo
.
렌더링 엔진의 경우 사용자는 벡터 또는 래스터 렌더러 를 구분할 수도 있습니다 . 벡터 그래픽 언어는 "이 지점에서 이 지점으로 선을 그립니다"와 같은 그리기 명령을 실행하므로 축척이 없습니다. 래스터 백엔드는 정확도가 DPI 설정에 따라 달라지는 라인의 픽셀 표현을 생성합니다.
다음은 Matplotlib 렌더러에 대한 요약 입니다 .
렌더러 |
파일 형식 |
설명 |
---|---|---|
AGG |
png |
래스터 그래픽 - Anti-Grain Geometry 엔진 을 사용하는 고품질 이미지 . |
벡터 그래픽 -- Portable Document Format 출력. |
||
추신 |
추신, 엡 |
벡터 그래픽 -- PostScript 출력. |
SVG |
SVG |
벡터 그래픽 -- 확장 가능한 벡터 그래픽 출력. |
PGF |
pgf, pdf |
|
카이로 |
png, ps, pdf, svg |
비대화형 백엔드를 사용하여 플롯을 저장하려면 이
matplotlib.pyplot.savefig('filename')
방법을 사용하십시오.
다음은 지원되는 사용자 인터페이스 및 렌더러 조합입니다. 이들은 대화형 백엔드 이며 화면에 표시하고 위 표의 적절한 렌더러를 사용하여 파일에 쓸 수 있습니다.
백엔드 |
설명 |
---|---|
QtAgg |
Qt 캔버스 에서 Agg 렌더링 ( PySide라고도 하는 Python용 PyQt 또는 Qt 필요). 이 백엔드는 IPython에서
. |
아이피플 |
Jupyter 위젯에 포함된 Agg 렌더링( ipympl 필요 ). 이 백엔드는 Jupyter 노트북에서 활성화할 수 있습니다
. |
GTK3Agg |
GTK 3.x 캔버스 로 Agg 렌더링 ( PyGObject 및
pycairo 필요 ). 이 백엔드는 IPython에서
. |
GTK4Agg |
GTK 4.x 캔버스 로 Agg 렌더링 ( PyGObject 및
pycairo 필요 ). 이 백엔드는 IPython에서
. |
맥 OS X |
OSX에서 Cocoa 캔버스로의 Agg 렌더링. 이 백엔드는 IPython에서 . |
TkAgg |
Tk 캔버스 에 대한 Agg 렌더링 ( TkInter 필요 ). 이 백엔드는 IPython에서 . |
nbAgg |
Jupyter 클래식 노트북에 대화형 그림을 삽입합니다. 이 백엔드는 를 통해 Jupyter 노트북에서 활성화할 수 있습니다
. |
WebAgg |
On |
GTK3카이로 |
|
GTK4카이로 |
|
wxAgg |
wxWidgets 캔버스 에 Agg 렌더링 ( wxPython 4 필요). 이 백엔드는 IPython에서 . |
메모
내장 백엔드의 이름은 대소문자를 구분하지 않습니다. 예를 들어 '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')
.