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

- 问题描述

在很多使用 matplotlib 库的代码中出现了 matplotlib.use('agg') 的语句。有些博客认为1,在导入matplotlib库后,且在matplotlib.pyplot库被导入前加“matplotlib.use(‘agg’)”语句的作用是在PyCharm中不显示绘图。例如1

import numpy as np
import matplotlib
matplotlib.use('agg') 
import matplotlib.pyplot as plt # matplotlib.use('agg')必须在本句执行前运行
x = np.arange(0, 2*np.pi, 0.001) 
y = np.sin(2 * np.pi * x) 
plt.clf() 
plt.plot(x,y) 
l = plt.axhline(linewidth=1, color='black') 
l = plt.axvline(linewidth=1, color='black') 
plt.show()

在Pycharm里面运行就不会显示图。

- 原理分析

实际上,这样的理解是表面的,这个语句确实会使得在Pycharm运行时无法显示图,但是必须注意,这是其原理导致的,而这个语句并不是设置Pycharm不显示图的语句,其实前述的代码中,删掉 plt.show() ,也不会显示图片。

matplotlib的use()命令其实是用来配置matplotlib的backend (后端)的命令。所谓后端,就是一个渲染器,用于将前端代码渲染成我们想要的图像2。后端详细的解释可以参考博客: matplotlib中什么是后端

对于用户接口,典型的渲染器是Agg,它是使用Anti-Grain Geometry C++库来产生光栅(像素)图。

那么为什么这样设置Pycharm会导致其不显示图片呢?

可以查看一下目前的后端设置。方法是执行下面代码。

import matplotlib
matplotlib.get_backend()

在Pycharm的Terminal 里面输入该项命令,可以看到
在这里插入图片描述
也就是说,Pycharm运行的时候,默认的后端是Qt5Agg

实际上,Agg 渲染器是非交互式的后端,没有GUI界面,所以不显示图片,它是用来生成图像文件。Qt5Agg 是意思是Agg渲染器输出到Qt5绘图面板,它是交互式的后端,拥有在屏幕上展示的能力3


  1. matplotlib.use(‘agg’)的作用 ↩︎ ↩︎

  2. UserWarning: Matplotlib is currently using agg,matplotlib图像无法显示问题 ↩︎

  3. matplotlib中什么是后端 ↩︎

  • 55
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值