복붙노트

[PYTHON] matplotlib / Python에서 백엔드를 전환하는 방법

PYTHON

matplotlib / 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. ==============================

    1."실험적"기능이 있습니다.

    "실험적"기능이 있습니다.

    import matplotlib.pyplot as p
    p.switch_backend('newbackend')  
    

    matplotlib doc에서 가져온 것입니다.

  2. ==============================

    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. ==============================

    3.reload 내장 함수 (importlib.reload를 Python 3에서 사용)를 사용하지 않는 이유는 무엇입니까?

    reload 내장 함수 (importlib.reload를 Python 3에서 사용)를 사용하지 않는 이유는 무엇입니까?

    import matplotlib
    matplotlib.use('agg')
    
    matplotlib = reload(matplotlib)
    matplotlib.use('cairo.png')
    
  4. ==============================

    4.그래서 이것이 당신이 찾고있는 것인지 확실하지 않습니다.

    그래서 이것이 당신이 찾고있는 것인지 확실하지 않습니다.

    matplotlib에 대한 특정 구성을 포함하는 matplotlibrc 파일을 통해 백엔드를 변경할 수 있습니다.

    스크립트에 다음을 넣을 수 있습니다.

    matplotlib.rcParams['backend'] = 'TkAgg' 
    

    또는 백엔드 사이를 전환 할 수있는 그런 것입니다.

  5. ==============================

    5.당신은 다른 파이썬 프로세스로 그 플롯을 만들 수도 있습니다. 아마도 pickle이나 joblib의 도움을 받아야 할 것입니다.

    당신은 다른 파이썬 프로세스로 그 플롯을 만들 수도 있습니다. 아마도 pickle이나 joblib의 도움을 받아야 할 것입니다.

  6. from https://stackoverflow.com/questions/3285193/how-to-switch-backends-in-matplotlib-python by cc-by-sa and MIT license