[PYTHON] matplotlib / Python에서 백엔드를 전환하는 방법
PYTHONmatplotlib / Python에서 백엔드를 전환하는 방법
다음 문제로 고민 중입니다. 차트 모음으로 구성된 보고서를 생성해야합니다. 이러한 차트는 모두 Matplotlib 기본 백엔드 (TkAgg)를 사용하여 작성됩니다. 하나의 차트는 카이로 백엔드를 사용하여 작성해야합니다. 그 이유는 igraph 그래프를 작성하고 카이로를 사용하여 그려지는 것만 가능하기 때문입니다.
문제는 내가 백엔드를 즉시 변경할 수 없다는 것입니다. 예를 들어 다음은 작동하지 않습니다. matplotlib.pyplot.switch_backend ( 'cairo.png') (나는 switch_backend 기능이 실험적이라는 것을 안다)
matplotlib.use ( "cairo.png")도 시도했지만 matplotlib.pyplot을 가져 오기 전에 matplotlib.use ( "cairo.png") 문을 가져와야하므로 가져 오기 문제가 발생합니다. 스크립트 작성 기간 동안 두 가지 백엔드가 필요합니다.
그래서 제 질문은 누군가가 Matplotlib에서 백엔드를 전환하는 방법을 보여주는 코드 스 니펫을 가지고 있습니까?
정말 고마워!
최신 정보: matplotlib를로드하고, 기본 백엔드를 보여주고, matplotlib를 언로드하고, 다시로드하고 백엔드를 변경하는 스 니펫을 작성했습니다.
import matplotlib
import matplotlib.pyplot as plt
import sys
print matplotlib.pyplot.get_backend()
modules = []
for module in sys.modules:
if module.startswith('matplotlib'):
modules.append(module)
for module in modules:
sys.modules.pop(module)
import matplotlib
matplotlib.use("cairo.png")
import matplotlib.pyplot as plt
print matplotlib.pyplot.get_backend()
그러나 이것을 실제로하는 방법입니까?
업데이트 2 : 저는 어제 심각한 두뇌 동결이있었습니다 ... 간단하고 가장 명백한 해결책은 모든 차트에 대해 카이로 백엔드를 사용하고 백엔드를 전혀 전환하지 않는 것입니다. :)
업데이트 3 : 사실, 여전히 문제이므로 matplotlib 백엔드를 동적으로 전환하는 방법을 알고있는 사람 .... 대답을 게시하십시오.
해결법
-
==============================
1."실험적"기능이 있습니다.
"실험적"기능이 있습니다.
import matplotlib.pyplot as p p.switch_backend('newbackend')
matplotlib doc에서 가져온 것입니다.
-
==============================
2.6 년 후 어떤 백엔드를 사용할 것인지 결정할 때 유사한 문제가 발생했습니다. 이 코드 스 니펫은 나를 위해 잘 작동합니다.
6 년 후 어떤 백엔드를 사용할 것인지 결정할 때 유사한 문제가 발생했습니다. 이 코드 스 니펫은 나를 위해 잘 작동합니다.
import matplotlib gui_env = ['TKAgg','GTKAgg','Qt4Agg','WXAgg'] for gui in gui_env: try: print "testing", gui matplotlib.use(gui,warn=False, force=True) from matplotlib import pyplot as plt break except: continue print "Using:",matplotlib.get_backend() Using: GTKAgg
결론적으로 백엔드를 교체하는 것은 새 백엔드를 강제 한 후에 matplotlib.pyplot을 다시 가져 오는 것만 큼 간단합니다
matplotlib.use('WXAgg',warn=False, force=True) from matplotlib import pyplot as plt print "Switched to:",matplotlib.get_backend() Switched to: WXAgg
여전히 문제가있는 사용자의 경우이 코드는 다음을 인쇄합니다. Non Gui 백엔드 목록; Gui 백엔드리스트; 그리고 나서 각 Gui 백엔드를 사용하여 그것이 존재하고 작동하는지 확인하십시오.
import matplotlib gui_env = [i for i in matplotlib.rcsetup.interactive_bk] non_gui_backends = matplotlib.rcsetup.non_interactive_bk print ("Non Gui backends are:", non_gui_backends) print ("Gui backends I will test for", gui_env) for gui in gui_env: print ("testing", gui) try: matplotlib.use(gui,warn=False, force=True) from matplotlib import pyplot as plt print (" ",gui, "Is Available") plt.plot([1.5,2.0,2.5]) fig = plt.gcf() fig.suptitle(gui) plt.show() print ("Using ..... ",matplotlib.get_backend()) except: print (" ",gui, "Not found")
-
==============================
3.reload 내장 함수 (importlib.reload를 Python 3에서 사용)를 사용하지 않는 이유는 무엇입니까?
reload 내장 함수 (importlib.reload를 Python 3에서 사용)를 사용하지 않는 이유는 무엇입니까?
import matplotlib matplotlib.use('agg') matplotlib = reload(matplotlib) matplotlib.use('cairo.png')
-
==============================
4.그래서 이것이 당신이 찾고있는 것인지 확실하지 않습니다.
그래서 이것이 당신이 찾고있는 것인지 확실하지 않습니다.
matplotlib에 대한 특정 구성을 포함하는 matplotlibrc 파일을 통해 백엔드를 변경할 수 있습니다.
스크립트에 다음을 넣을 수 있습니다.
matplotlib.rcParams['backend'] = 'TkAgg'
또는 백엔드 사이를 전환 할 수있는 그런 것입니다.
-
==============================
5.당신은 다른 파이썬 프로세스로 그 플롯을 만들 수도 있습니다. 아마도 pickle이나 joblib의 도움을 받아야 할 것입니다.
당신은 다른 파이썬 프로세스로 그 플롯을 만들 수도 있습니다. 아마도 pickle이나 joblib의 도움을 받아야 할 것입니다.
from https://stackoverflow.com/questions/3285193/how-to-switch-backends-in-matplotlib-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] PyInstaller에 'pandas._libs.tslibs.timedeltas'라는 모듈이 없습니다. (0) | 2018.10.12 |
---|---|
[PYTHON] 여러 가지 Popen 명령을 파이프와 연결 (0) | 2018.10.12 |
[PYTHON] 하위 프로세스를 사용하여 Windows에서 Python 스크립트 실행 (0) | 2018.10.12 |
[PYTHON] print 문 다음에 줄 바꿈을 어떻게 억제 할 수 있습니까? (0) | 2018.10.12 |
[PYTHON] 어떻게 루프에서 파이썬 목록에서 항목을 제거하려면? [복제] (0) | 2018.10.12 |