- 问题描述

在很多使用 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中什么是后端 ↩︎

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐