无法使用matplotlib.use('Agg'),图表始终显示在屏幕上

时间:2017-05-20 13:41:39

标签: python matplotlib anaconda

我正在研究matplotlib,不知道如何保存图表而不是在屏幕上打印。

所以我在互联网上做了一些研究,很多答案说解决方案是matplotlib.use('Agg')。它必须在导入matplotlib.pyplot或pylab之前。

然后当我在我的脚本的第一行添加它时,它根本不起作用。

import matplotlib
matplotlib.use('Agg') 
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

E:\Program Files\Anaconda3\lib\site-packages\matplotlib\__init__.py:1401: UserWarning:  This call to matplotlib.use() has no effect
because the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.

  warnings.warn(_use_error_msg)

我使用Anaconda Spyder,所以我重新启动内核并再次运行我的脚本,我得到了同样错误的信息。

然后我再次重新启动内核并直接在控制台中输入以下代码:

In[1]: import matplotlib as mpl

In[2]: mpl.use('Agg')

E:\Program Files\Anaconda3\lib\site-packages\matplotlib\__init__.py:1401: UserWarning:  This call to matplotlib.use() has no effect
because the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.

  warnings.warn(_use_error_msg)

此外,如果我在脚本末尾删除'plt.show()'或添加'plt.ioff()',图表将始终在屏幕上打印。

感谢大家的回答。现在我有两个解决方案:

  1. 只需使用plt.close(),这不会改变后端,而且数字也不会显示。

  2. 使用plt.switch_backend('Agg'),这会将后端切换为'agg'并且屏幕上没有打印数字。

3 个答案:

答案 0 :(得分:4)

原始问题的答案很简单。 如果您不想在屏幕上显示图形,请不要使用plt.show() 所以您要做的只是:

import matplotlib.pylab as plt    
plt.plot(x,y) #whatever the x, y data be
#plt.show()  """Important: either comment this line or delete it"""
plt.savefig('path/where/you/want/to/save/filename.ext') 
#'filename' is either a new file or an already existing one which will get overwritten at the time of execution. 'ext' can be any valid image format including jpg, png, pdf, etc.

答案 1 :(得分:2)

您可以尝试切换后端。显然Spyder会在你加载matplotlib之前加载,use没有任何效果。这可能会有所帮助: How to switch backends in matplotlib / Python

答案 2 :(得分:2)

plt.plot(x,y) plt.savefig('path/figure_filename.jpg',dpi=300)