matplotlib / Python에서 백엔드를 전환하는 방법
다음 문제로 어려움을 겪고 있습니다. 차트 모음으로 구성된 보고서를 생성해야합니다. 하나를 제외한 모든 차트는 Matplotlib 기본 백엔드 (TkAgg)를 사용하여 만들어집니다. 카이로 백엔드를 사용하여 차트 하나를 만들어야합니다. 그 이유는 igraph 그래프를 플로팅하고 있으며 카이로를 사용해서 만 플로팅 할 수 있기 때문입니다.
문제는 즉시 백엔드를 변경할 수 없다는 것입니다. 예를 들어 다음은 작동하지 않습니다.
matplotlib.pyplot.switch_backend('cairo.png')
(switch_backend 기능이 실험적이라는 것을 알고 있습니다)
그리고 나는 또한 시도 matplotlib.use("cairo.png")
했지만 matplotlib.use("cairo.png")
성명을 가져 오기 전에 와야 하므로 가져 오기 문제가 발생합니다 matplotlib.pyplot
. 하지만 스크립트 수명 동안 두 개의 다른 백엔드가 필요합니다.
그래서 제 질문은 누군가가 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 : 어제 심각한 두뇌 동결이 발생했습니다 ... 간단하고 가장 확실한 해결책은 모든 차트에 Cairo 백엔드를 사용하고 백엔드를 전혀 전환하지 않는 것입니다 :)
업데이트 3 : 사실, 여전히 문제이므로 matplotlib 백엔드를 동적으로 전환하는 방법을 아는 사람은 누구나 답변을 게시하십시오.
6 년 후 나는 어떤 backend
것을 사용할 수 있는지 결정하려고 할 때 비슷한 문제를 발견했습니다 .
이 코드 조각은 저에게 잘 작동합니다.
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
추론 할 수 있듯이 교체 는 새 항목을 강제 한 후 backend
다시 가져 오는 것처럼 간단 matplotlib.pyplot
합니다.backend
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")
"실험적"기능이 있습니다.
import matplotlib.pyplot as plt
plt.switch_backend('newbackend')
matplotlib doc 에서 가져 왔습니다 .
Switch the default backend to newbackend. This feature is experimental, and is only expected to work switching to an image backend. Eg, if you have a bunch of PostScript scripts that you want to run from an interactive ipython session, you may want to switch to the PS backend before running them to avoid having a bunch of GUI windows popup. If you try to interactively switch from one GUI backend to another, you will explode. Calling this command will close all open windows.
Why not just use the reload
built-in function (importlib.reload
in Python 3)?
import matplotlib
matplotlib.use('agg')
matplotlib = reload(matplotlib)
matplotlib.use('cairo.png')
So I am not completely sure if this is what you are looking for.
You can change your backend through the matplotlibrc file which contains certain configurations for your matplotlib.
In your script you can put:
matplotlib.rcParams['backend'] = 'TkAgg'
or something like that to switch between backends.
You could also have a different Python process make that plot, possibly with the help of pickle or joblib.
In my case (Windows 10 + python 3.7), the first answer by @Rolf of Saxony didn't work very well. Instead of trying all the available environments and configuring one of them at the beginning, i.e, just after
import matplotlib
I had to change the environment from 'Agg' to 'TkAgg' using
matplotlib.use('TKAgg',warn=False, force=True)
right before the code where I actually plotted, i.e,
import matplotlib.pyplot as plt
fig = plt.figure()
# AND SO ON....
To permanently change the backend you can use this:
First locate the
matplotlibrc
file:import matplotlib matplotlib.matplotlib_fname() # '/Users/serafeim/.matplotlib/matplotlibrc'
Open the terminal and do:
cd /Users/serafeim/.matplotlib/ ls
Edit the file (if it does not exist use this command:
touch matplotlib
to create it):vim matplotlibrc
Add this line and save:
backend: TkAgg
참고URL : https://stackoverflow.com/questions/3285193/how-to-switch-backends-in-matplotlib-python
'developer tip' 카테고리의 다른 글
RESTful 서비스를위한 Jersey 및 Guice 사용에 대한 실용적인 조언 (0) | 2020.11.18 |
---|---|
Haskell Weird Kinds : Kind of (->)는 ?? (0) | 2020.11.18 |
JAX-RS 서비스에 JSON 오브젝트를 POST하는 방법 (0) | 2020.11.18 |
Fluent Validation을 사용한 조건부 검증 (0) | 2020.11.18 |
Ant에서 파일이 아닌 디렉토리의 존재를 확인할 수있는 방법이 있습니까? (0) | 2020.11.17 |