matplotlib中什么是后端

在很多网上文档和邮件列表中提到了"后端",并且很多初学者会对这个术语迷惑。matplotlib把不同使用情形和输出格式作为目标。一些人用matplotlib在python shell上交互,当他们输入命令能够弹出绘图窗口。一些人把matplotlib嵌入到其他的用户图形接口如:wxpython或者pygtk中来编写丰富的应用程序。有些人用matplotlib使用到批处理脚本中,从数字模拟中生成Postscript图片,还有些人用在web应用服务器中来动态生成图。

为了支持所有的使用情形,matplotlib能够产生不同的输出,而把每一个不同输出的能力叫做一个后端。而前端就是用户需要处理的代码,如绘图代码,然后后端做的就是所有看不到的辛苦工作来生成视图窗口。这里有两种不同类型的后端:

1.用户接口后端(又叫做"交互式后端",如pygtk, wxpython, thinter,qt, macosx或者fltk)。

2.硬拷贝后端,也叫做非交互式后端,用来生成图像文件(PNG,SVG,PDF, PS)

主要有两种方式配置你的后端。

1. 在matplotlibrc文件中设置后端参数,请查看
自定义matplotlib

backend : WXAgg # 使用wxpython和antigrain(agg)渲染

2. 另外一种方式是使用matplotlib的use()命令。

import matplotlib
matplotlib.use(‘PS‘) # 默认生成postscript输出。

如果你使用use命令,必须在import matplotlib.pyplot或者matplotlib.pylab之前设置。

注意: 后端的名字是不区分大小写的,如: “GTKAgg”和“gtkagg”是一样的。

使用常规方式安装matplotlib如二进制安装包或者linux发行包,那么一个好的默认后端已经设置好了,即允许你交互式工作也可以从脚本文件中绘制,可以输出到屏幕也可以输出到文件。所以你也不必去使用上面给出的方法去初始化了。

然而,如果你想要写用户图形接口或者web应用服务器(在web应用服务器中使用Matplotlib),或者需要更好理解它是怎么进行的,请阅读下去。对于图形化用户接口,为了使事情更加可定制化,matplotlib区分了渲染器(绘图)和绘图面板(显示绘图的地方)的概念。对于用户接口,典型的渲染器是Agg,它是使用Anti-Grain Geometry C++库来产生光栅(像素)图。所有的用户接口除了macosx外,都可以和agg一样来渲染,如WXAgg,GTKAgg,QT4Agg,TKAgg。另外,一些用户接口支持其他的渲染引擎。例如:使用GTK,你可以选择GDK渲染(后端为GTK), 也可以使用Cairo渲染(后端为GTKCairo)

对于渲染引擎,可以用向量或者光栅渲染器来区别。向量图语言画图命令有点像"从这个点到那个点画条线",所以是可以任意比例缩放。光栅后端通过每英寸每点的像素来产生线条。

这里对matplotlib渲染器做个总结(没有等级先后次序,都是非交互式的后端,拥有写入到文件中的能力)

  渲染器       文件类型 描述
  AGG png 光栅 –使用 Anti-Grain Geometry 高质量渲染引擎
  PS ps eps 矢量图 – Postscript 输出
  PDF pdf 矢量图– 携带格式
  SVG svg 矢量图 – 可伸缩矢量图形
  Cairo png ps pdf svg ... 矢量图 – Cairo
  GDK png jpg tiff ... 光栅 – gimp

还有一些支持用户接口和渲染器紧密结合的后端,他们是交互式的后端,拥有在屏幕上展示的能力,使用上表中适当的渲染器来写入到文件中。

     后端               描述
    GTKAgg Agg渲染器输出到GTK绘图面板(需要PyGTK)
       GTK GDK渲染器输出到GTK绘图面板(不推荐,需要PyGTK)
    GTKCairo Cairo渲染器输出到GTK绘图面板(需要PyGTK)
     WXAgg Agg渲染器输出到wxWidgets绘图面板(需要wxPython)
    WX 原生wxWidgets绘图输出到wxWidgets绘图面板(不推荐,需要wxPython)
    TkAgg Agg渲染器输出到Tk绘图面板(需要Tkinter)
    QtAgg Agg渲染器输出到Qt绘图面板(不推荐,请使用Qt4Agg,需要PyQt)
    Qt4Agg Agg渲染器输出到Qt4绘图面板(需要PyQt4)
    FLTKAgg Agg渲染器输出到FLTK绘图面板(需要pyFLTK, 使用不是很广,考虑使用TKAgg,GTKAgg,WXAgg,或者QT4Agg替代)
    macosx Cocoa渲染器在osx上。(目前在非交互式模式缺少阻塞show()行为)
时间: 2024-10-11 22:28:15

matplotlib中什么是后端的相关文章

基于Python实现matplotlib中动态更新图片(交互式绘图)

最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和matplotlib实现路径的动态显示和交互式绘图(和Matlab功能类似). Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存.切换以及各种第三方包安装问题.Anaconda利用

Matplotlib中的颜色

使用matplotlib中会遇到选择颜色的问题,很多人会觉得自带的matlab风格的颜色不好看.好在Matplotlib已经预见到了这个问题,除了支持最基本的matlab传统颜色之外,还支持很多种颜色的表达方式: RGB 或者 RGBA 浮点值元组,[0, 1]之间,例如(0.1, 0.2, 0.5)或者(0.1, 0.2, 0.5, 0.3). RGB 或者 RGBA 十六进制字符串,例如#0F0F0F或者#0F0F0F0F. [0, 1]之间的浮点值的字符串表示,用于表示灰度,例如0.5.

Matplotlib中中文不显示问题

我们在使用jupter进行数据分析的时候,会接触到Matplotlib这个库,它是用来进行可视化数据分析的,在一个图中,我们常常会加入一些中文来进行说明.当我们加入中文的时候会出现下图所示的样子: 可以看到,中文变成了这种乱码的形式.网上有很多的例子,有很多是错误的,这里我把我测试成功的方法说明一下. 我使用的电脑系统是Window10,后面的方法也是针对它的,其他的系统应该也差距不大,可以借鉴一下. 1.找一个喜欢的字体 字体的话,我们可以去网上下载,也可以用系统自带的.我们可以进入到目录:C

matplotlib中subplots的用法

1.matplotlib中如果只画一张图的话,可以直接用pyplot,一般的做法是: import matplotlib.pyplot as plt plt.figure(figsize=(20,8),dpi=90) # 设置画布大小及像素 plt.xticks()  # 设置x坐标刻度 plt.yticks() # 设置y坐标刻度 plt.xlabel() # 设置x坐标名 plt.ylabel() # 设置y坐标名 plt.title() # 设置主题 plt.plot() # 画图 plt

AngularJS中在前后端分离模式下实现权限控制 - 基于RBAC

权限的设计中比较常见的就是RBAC基于角色的访问控制,基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合.每一种角色对应一组相应的权限. 一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限.这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销. 在Angular构建的单页面应用中,要实现这样的架构我们需要额外多做一些事

matplotlib中的legend()——用于显示图例

legend()的一个用法: 当我们有多个 axes时,我们如何把它们的图例放在一起呢?? 我们可以这么做: import matplotlib.pyplot as plt import numpy as np x = np.arange(1, 11) fig = plt.figure(1) ax1 = plt.subplot(2, 1, 1) ax2 = plt.subplot(2, 1, 2) l1, = ax1.plot(x, x*x, 'r') #这里关键哦 l2, = ax2.plot

js跨越请求的2中实现 JSONP /后端接口设置运行跨越header

由于浏览器同源策略,a域名的js向b域名ajax请求会被禁止.JS实现跨越访问接口有2中办法. 1.后端接口设置允许跨越的header头. //header('Access-Control-Allow-Origin:*'); //支持全域名访问,不安全,部署后需要固定限制为客户端网址 header('Access-Control-Allow-Origin:http://www.example-a.com'); //设置的是带协议的url,而不是一个域名.可以设置多个url,用逗号分隔 echo

matplotlib中中文字体配置

解决方式1:利用matplotlib的字体管理工具font_manager---->缺点:每次必须要进行设置 import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname='Desktop/simhei.ttf',size=20) # 前提是对应路径下有你想要使用的字体文件 # 1.设置画布 plt.figure(figsize=(20,

nginx虚拟路径中proxy_pass对后端请求的影响

假设nginx中的配置是这样的: server { listen 80; server_name x.x.x.x; . . . . . . location /subdir { proxy_pass http://y.y.y.y; } } 那么,当用户请求http://x.x.x.x/subdir/other时,匹配到该区块,nginx反向代理到后端时会保留虚拟路径.nginx实际向后端发起的请求URL为http://y.y.y.y/subdir/other. 假设nginx中的配置是这样的: