我正在努力解决以下问题。我需要生成由一组图表组成的报告。所有这些图表,除了一个,都是使用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后端的人......请发表您的答案。
9条答案
按热度按时间mtb9vblg1#
六年后,我遇到了一个类似的问题,当试图决定哪一个
backend
是可用的。注:见下文注意事项
这段代码很适合我:
可以推断出,交换
backend
就像在强制新的backend
之后重新导入matplotlib.pyplot
一样简单对于那些仍然有问题的人,这段代码将打印出:
非GUI后端列表;
桂的列表后端;
然后尝试使用每个Gui后端来查看它是否存在并运行。
注意事项:matplotlib自3.3.0版本以来的更改
egdjgwm82#
有一个“实验性”的功能:
来自matplotlib doc。
将默认后端切换为newbackend。此功能是实验,预计只工作切换到一个图像后端。例如,如果你有一堆PostScript脚本,你想从一个交互式ipython会话运行,你可能想在运行它们之前切换到PS后端,以避免弹出一堆GUI窗口。如果您试图交互式地从一个GUI后端切换到另一个,您将爆炸。调用此命令将关闭所有打开的窗口。
gajydyqb3#
为什么不直接使用
reload
内置函数(Python 3中的importlib.reload
)?9o685dep4#
所以我不完全确定这是否是你要找的。
您可以通过matplotlibrc文件更改后端,该文件包含matplotlib的某些配置。
在你的脚本中,你可以写:
或者类似的东西来在后端之间切换。
ldfqzlk85#
在我的例子中(Windows 10 + Python 3.7),萨克森州的@Rolf的第一个回答并不太好。而不是尝试所有可用的环境并在开始时配置其中的一个,即之后
我不得不将环境从'Agg'更改为'TkAgg'
就在我实际绘制的代码之前,即
8ehkhllq6#
Extra Info
虽然每个人都展示了自己最喜欢的后端,但要弄清楚需要安装什么以及需求是什么是相当混乱的。至少当你试图理解通常令人困惑的技术官僚文档时是这样。今天我做了几个实验,我认为我已经找到了每个后端最简单的解决方案,可以在Windows中使用 matplotlib 并使用Py3.8.5(没有内置Qt)进行绘图。以下是我的发现:
以下是所有PyPi或Repos的链接:
然而,非常令人惊讶的是,考虑到使用**
Tcl/Tk
**和python的tkinter
包的大量文档,我无法安装它,也没有找到任何有用的说明如何将DLL导入python。(对于linux来说,这是微不足道的,因为你只需要使用OS包管理器apt-get install <tk-what-not>
,但是这个选项不适用于windows,也没有任何简单的类似物。下面是一个列表,列出了您可以获得的许多不同的二进制文件。What backends are available and where?
让我们用下面的一行代码来启发自己:
Setting the back-end
正如文档所述:* 有3种方式可以配置您的后端:*
1.设置
rcParams["backend"]
(默认值:'agg')参数在您的matplotlibrc文件中1.设置
MPLBACKEND
环境(shell)变量1.使用函数
matplotlib.use()
Using the backend
最后,要使用可用的后端,只需执行以下操作:
6ljaweal7#
要永久更改后端,您可以使用以下命令:
1.首先找到
matplotlibrc
文件:1.打开终端,执行以下操作:
1.编辑文件(如果文件不存在,请使用以下命令:
touch matplotlib
来创建它):1.添加此行并保存:
eit6fx6z8#
如果你使用的是IPython控制台(包括在Spyder中),你可以使用内置的魔术命令来快速切换后端,例如:
通过以下命令获取可用后端的列表:
可用的matplotlib后端:['tk','gtk',' gtk3','wx',' qt4','qt5',' qt','osx',' nbagg','notebook',' agg','svg',' pdf','ps',' inline','ipympl','widget']
ubbxdtey9#
您还可以使用不同的Python进程来绘制该图,可能需要pickle或joblib的帮助。