Matplotlib 的默认 GUI 后端是什么?

9

我已经编写了下面的脚本,我们称之为 test-matplotlib-printbackend.py:

#!/usr/bin/env python

import matplotlib as mpl
import matplotlib.pyplot as plt

xx = range(100)
yy = [i*2+5 for i in xx]

fig, ax = plt.subplots()
ax.plot(xx, yy)

print("Matplotlib plt backend: {}".format(plt.get_backend()))

plt.show()

在Windows 10上,针对MINGW64下的Python3以及Anaconda下的Python3,我得到以下输出结果:

Matplotlib plt backend: Qt5Agg

然而,在Rasbian(树莓派Debian操作系统)上的Python3中,我得到了以下输出:
Matplotlib plt backend: TkAgg

这让我有些困惑,因为我认为在所有平台上 TkAgg 都应该是 Matplotlib 的默认 GUI 后端!?

所以,我只是想知道 - 不同平台上 Matplotlib 的默认 GUI 后端是否有文档记录?

2个回答

13

后端选择逻辑不太透明,且文档不够完善。

在现代的matplotlib中不存在“默认后端”,即rcParams['backend']被设置为一个“sentinel”值。
在导入matplotlib时,从候选列表["macosx", "qt5agg", "qt4agg", "gtk3agg", "tkagg", "wxagg"]中选择第一个可用的后端。

为了避免自动选择,请通过rcParams['backend']参数或MPLBACKEND环境变量手动设置后端。这一部分已经被记录下来了


当前的文档中列出的候选列表包括:MacOSX、QtAgg、GTK4Agg、Gtk3Agg、TkAgg、WxAgg和Agg。 - Niko Föhr

2
默认后端定义在 mpl.rcParams['backend'] 中。在 Linux_x64 上,它被设置为 'Qt5Agg'。在 matplotlib.backends.__init__ 中的 _get_running_interactive_framework 函数检查可用的后端,PyQt5 在优先级列表中排名最高。 pyplot.switch_backend 函数使用 _get_running_interactive_framework 在导入时选择有效使用的后端。在此处搜索行 switch_backend(rcParams["backend"])https://matplotlib.org/3.1.1/_modules/matplotlib/pyplot.html 您可以检查 Rasbian 上是否可用 PyQt5 以及 rcParams 条目是什么。

1
事实证明,“默认后端在mpl.rcParams['backend']中定义”这个说法是不准确的。请参考被接受的答案https://dev59.com/Ebfna4cB1Zd3GeqPtHd-#58838910。 - mcsoini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接