“matplotlib.use(‘agg‘)“语句的作用机理
- 问题描述在很多使用 matplotlib 库的代码中出现了 matplotlib.use('agg') 的语句。有些博客认为1,在导入matplotlib库后,且在matplotlib.pyplot库被导入前加“matplotlib.use(‘agg’)”语句的作用是在PyCharm中不显示绘图。例如1:import numpy as npimport matplotlibmatplotlib
- 问题描述
在很多使用 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。
更多推荐
所有评论(0)