matplotlib: 有关 Backend 的说明

什么是Backend?

Matplotlib针对许多不同的用例和输出格式。

有些人在python shell中交互式地使用Matplotlib,并在键入命令时弹出绘图窗口。

有些人使用木星笔记本,绘制内联图来快速分析数据。

还有一些人将Matplotlib嵌入到图形用户界面中,如PyQt或PyGObject,以构建丰富的应用程序。

有些人在批处理脚本中使用Matplotlib从数值模拟中生成postscript图像,还有一些人运行web应用程序服务器动态地提供图形。

为了支持所有这些用例,Matplotlib可以针对不同的输出,这些功能中的每一个都被称为后端。

“前端”是面向用户的代码,也就是绘图代码,而“后端”负责所有幕后的工作,以制作图形。

有两种类型的后端:

  1. 用户界面后端(用于PyQt/PySide、PyGObject、Tkinter、wxPython或macOS/Cocoa);也称为“交互式后端”;
  2. 硬拷贝后端制作图像文件(PNG, SVG, PDF, PS;也称为“非交互式后端”)。

如何选择一个后端

有三种方式来配置你的后端:

1. 修改matplotlibrc文件中的rcParams["backend"](默认值:'agg')参数

2. MPLBACKEND环境变量: 可以将这个可选变量设置为选择Matplotlib后端

3. 使用函数matplotlib.use ()

下面给出了更详细的描述。

如果存在多个配置,则列表中的最后一个优先; 例如,调用matplotlib.use()将覆盖matplotlibrc中的设置。

如果没有显式设置后端,Matplotlib会根据系统上可用的内容以及GUI事件循环是否已经运行自动检测一个可用的后端。

在Linux上,如果没有设置环境变量DISPLAY,则“事件循环”被标识为“headless”,这将导致回退到非交互后端(agg)。

下面是配置方法的详细说明:

1. 修改matplotlibrc文件(路径为: C:\Program Files\Python38\Lib\site-packages\matplotlib\mpl-data)中的rcParams["backend"](默认值:'agg')参数.

2. 设置MPLBACKEND环境变量:

您可以为当前shell或单个脚本设置环境变量。

在Unix:

export MPLBACKEND=qt5agg
python simple_plot.pyMPLBACKEND=qt5agg python simple_plot.py

在Windows上,只有前者是可能的:

set MPLBACKEND=qt5agg
python simple_plot.py

设置这个环境变量将覆盖任何matplotlibrc中的后端参数,即使在您当前的工作目录中有matplotlibrc。因此,全局设置MPLBACKEND,例如在你的.bashrc或.profile中,是不鼓励的,因为它可能会导致反直觉的行为。

3. 如果你的脚本依赖于特定的后端,你可以使用函数matplotlib.use():

import matplotlib
matplotlib.use('qt5agg')

这应该在创建任何图形之前完成,否则Matplotlib可能无法切换后端并引发ImportError。

如果用户想使用不同的后端,使用use就需要修改代码。因此,除非绝对必要,否则应避免显式调用use。

内装式的后端

默认情况下,Matplotlib应该自动选择一个默认后端,它允许从脚本进行交互工作和绘图,并将输出输出到屏幕和/或文件,因此至少在初始阶段,您不需要担心后端。

最常见的例外是您的Python发行版没有安装tkinter,并且没有安装其他GUI工具包。这发生在某些Linux发行版上,您需要安装名为python-tk(或类似的)的Linux包。

但是,如果您想编写图形用户界面或web应用程序服务器(嵌入到web应用程序服务器中),或者需要更好地理解正在发生的事情,请继续阅读。

为了使图形用户界面的内容更易于定制,Matplotlib将渲染器(实际绘图的东西)的概念与画布(绘图的地方)分离开来。

用户界面的标准渲染器是Agg,它使用反纹理几何c++库来制作图形的栅格(像素)图像; Qt5Agg、Qt4Agg、GTK3Agg、wxAgg、TkAgg和macosx后端使用它。另一种渲染器是基于Cairo库的,由Qt5Cairo、Qt4Cairo等使用。

对于渲染引擎,还可以区分矢量渲染器和栅格渲染器。矢量图形语言会发出像“从这一点到这一点画一条线”这样的绘图命令,因此是无尺度的,而光栅后端会生成直线的像素表示,其精度取决于DPI设置。

下面是Matplotlib渲染器的摘要(每个渲染器都有一个同名的后端;这些是非交互式后端,能够写入文件):

Renderer Filetypes Description
AGG png raster graphics -- high quality images using the Anti-Grain Geometry engine
PDF pdf vector graphics -- Portable Document Format
PS ps, eps vector graphics -- Postscript output
SVG svg vector graphics -- Scalable Vector Graphics
PGF pgf, pdf vector graphics -- using the pgf package
Cairo png, ps, pdf, svg raster or vector graphics -- using the Cairo library

要使用非交互式后端保存绘图,请使用matplotlib.pyplot.savefig('filename')方法。

这里是支持的用户界面和渲染器组合; 这些是交互式的后端,能够显示到屏幕上,并从上面的表中使用适当的渲染器来写入文件:

Backend Description
Qt5Agg Agg rendering in a Qt5 canvas (requires PyQt5). This backend can be activated in IPython with %matplotlib qt5.
ipympl Agg rendering embedded in a Jupyter widget. (requires ipympl). This backend can be enabled in a Jupyter notebook with %matplotlib ipympl.
GTK3Agg Agg rendering to a GTK 3.x canvas (requires PyGObject, and pycairo or cairocffi). This backend can be activated in IPython with %matplotlib gtk3.
macosx Agg rendering into a Cocoa canvas in OSX. This backend can be activated in IPython with %matplotlib osx.
TkAgg Agg rendering to a Tk canvas (requires TkInter). This backend can be activated in IPython with %matplotlib tk.
nbAgg Embed an interactive figure in a Jupyter classic notebook. This backend can be enabled in Jupyter notebooks via %matplotlib notebook.
WebAgg On show() will start a tornado server with an interactive figure.
GTK3Cairo Cairo rendering to a GTK 3.x canvas (requires PyGObject, and pycairo or cairocffi).
Qt4Agg Agg rendering to a Qt4 canvas (requires PyQt4 or pyside). This backend can be activated in IPython with %matplotlib qt4.
wxAgg Agg rendering to a wxWidgets canvas (requires wxPython 4). This backend can be activated in IPython with %matplotlib wx.

请注意: 内置后端名称不区分大小写; 例如,'Qt5Agg'和'qt5agg'是等价的。

ipympl

jupiter小部件生态系统发展太快,无法直接在Matplotlib中支持。安装ipympl

pip install ipympl
jupyter nbextension enable --py --sys-prefix ipympl

或者

conda install ipympl -c conda-forge

如何选择PyQt4或PySide?

可以将QT_API环境变量设置为pyqt或pyside,分别使用PyQt4或pyside。

因为要使用的绑定的默认值是PyQt4,所以Matplotlib首先尝试导入它。如果导入失败,则尝试导入PySide。

使用non-builtin后端

更一般地说,任何可导入的后端都可以通过使用上面的任何方法来选择。

If name.of.the.backend is the module containing the backend, use module://name.of.the.backend as the backend name, e.g. matplotlib.use('module://name.of.the.backend').

其他代码

import matplotlib
import matplotlib.rcsetup as rcsetupmatplotlib.use('Agg', force=True)  # 'Agg'
matplotlib.get_backend()  # 查看当前系统的后端
matplotlib.use('Qt5Agg', force=True)  # 'Qt5Agg'
matplotlib.get_backend()  # 查看当前系统的后端matplotlib.matplotlib_fname()  # 查看matplotlibrc路径
# 'C:\\Program Files\\Python38\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc'print(rcsetup.all_backends)  # 查看支持的所有Backend
['GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt5Cairo', 'TkAgg', 'TkCairo', 'WebAgg', 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template']

matplotlib: 有关 Backend 的说明相关推荐

  1. linux python matplotlib 使用,关于Linux:如何在Python的matplotlib中设置“后端”?

    我是matplotlib的新用户,我的平台是Ubuntu 10.04 Python 2.6.5 这是我的代码 import matplotlib matplotlib.use('Agg') impor ...

  2. python怎么安装matplotlib-python 安装matplotlib

    1 sudo apt-get install python-dev 先安装numpy: 1 2 python setup.py build sudo python setup.py install - ...

  3. 数据科学入门与实战:Matplotlib绘图基础一

    为什么用python画图 GUI太复杂 Excel太头疼 python简单免费 什么是matplotlib 一个Python包用于2D绘图 还有很多扩展如:seaborn # hello world ...

  4. jupyter notebook matplotlib绘制动态图并显示在notebook中

    有些时候matplotlib 的绘图没法显示在notebook中,或者显示不了.这与backend有关. 首先启动你的notebook,输入 %pylab 查看你的matplotlib后端,我的输出为 ...

  5. ios python3闪退_解决Python3 cx_Freeze打包闪退/无法执行以及No module named 'matplotlib.backends.backend_tkagg'...

    [虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是可能存在.所以了解原理很重要.这里讲述在没有ARC的情况下,如何使用Instruments来查找程 cx_Free ...

  6. PyCharm提示 Backend Qt5Agg is interactive backend. Turning interactive mode on.

    目录 方法一:将matplotlib的backend设置为非交互式.[推荐] 方法二:pip install opencv-python. 方法三:勾选 Gevent compatible. PyCh ...

  7. “matplotlib.use(‘agg‘)“语句的作用机理

    - 问题描述 在很多使用 matplotlib 库的代码中出现了 matplotlib.use('agg') 的语句.有些博客认为1,在导入matplotlib库后,且在matplotlib.pypl ...

  8. 运行Matplotlib代码,却没有任何图像窗口跳出

    Matplotlib代码写好并没有任何报错,但是没有任何图像窗口跳出,在网上查找解决办法时,找到了这篇博文"讲解图像窗口可以跳转,但是只有白框没有绘图"的解决办法 文章中说先用以下 ...

  9. 使用 Spyder IDE 时 matplotlib 绘图的显示问题

    Spyder 环境下 matplotlib 的 backend 设置是在打开环境时就配置好了的,所以通常的方法: import matplotlib matplotlib.use('Qt5Agg') ...

最新文章

  1. Redis 缓存穿透、雪崩、缓存数据库不一致、持久化方式、分布式锁、过期策略
  2. 深度学习巨头Yoshua Bengio清华演讲: 深度学习通往人类水平人工智能的挑战
  3. 关于全角半角转换(转)
  4. android 渲染流程
  5. 地图数据快速渲染------基于传统GIS平台多服务器切片
  6. java通过poi读取excel中的日期类型数据或自定义类型日期
  7. C++ 运算符重载(一) | 输入/输出,相等/不等,复合赋值,下标,自增/自减,成员访问运算符
  8. java.util.zip.zipexception_android-如何解决java.util.zip.ZipException?
  9. 爬虫入门二(urllib,urllib2)
  10. iOS插件化研究之一——JavaScriptCore
  11. centos如何界面操作mysql_【mysql】centos7下mysql的安装以及基本操作
  12. delphi连接mysql不用添加DSN(mysql connector odbc 5.1版)
  13. 面向对象程序设计概念
  14. 每日一淘洞察市场消费真相,深挖三四五线城市消费者需求
  15. [office]在word中设置分级标题的方法
  16. Mesh Baker的基本操作与功能演示
  17. qcow2 磁盘镜像文件的创建、格式化、分区、挂载
  18. 【ubuntu】安装vmwaretools后还是不能复制粘贴---实测解决。
  19. 供电公司业扩工程项目管理(原创)
  20. 换肤功能原理及自定义组件化UI样式初步尝试

热门文章

  1. html常用的符号实体
  2. QT编译错误:invalid application of 'sizeof' to incomplete type 'Qt3DRender::QPickEvent'
  3. 实验5 —— 编写、调试具有多个段的程序
  4. vue中使用this遇到的坑
  5. C# 读取word2003 并且显示在界面上的方法
  6. excel的常用公式
  7. UVa1401 Remember the Word(DP+Trie树)
  8. 判断字符串为空 为null
  9. PostgresSQL模式
  10. C++的RTTI基本原理