Python Can';t使用matplotlib.use(';Agg';),图形始终显示在屏幕上

Python Can';t使用matplotlib.use(';Agg';),图形始终显示在屏幕上,python,matplotlib,anaconda,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 pl

我正在学习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()”,图形将始终打印在屏幕上


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

  • 只需使用
    plt.close()
    ,这不会改变后端,也不会显示图形

  • 使用
    plt.switch\u backend('Agg')
    ,这会将后端切换到'Agg',屏幕上不会打印任何图形


  • 您可以尝试切换后端。显然,Spyder会在您加载matplotlib之前加载,而
    use
    没有任何效果。这可能会有帮助:

    plt.绘图(x,y)
    
    plt.savefig('path/figure\u filename.jpg',dpi=300)

    原始问题的答案很简单。 如果您不想在屏幕上显示图形,请不要使用
    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.
    

    您是否尝试过使用
    plt.savefig
    ?没有尝试更改后端。是的,我的第一次尝试只是使用plt.savefig。脚本完成后,所有的图形都会显示在屏幕上。显示很好。但是这个数字被保存了吗?如果这是您的问题:使用
    plt.close
    之后再关闭它。plt.close工作!!!:)thanksmatplotlib.get_backend()显示Spyder使用后端:'module://ipykernel.pylab.backend_inline'. 使用plt.switch_backend('Agg')后,现在的后端是'Agg'。您能提供一个解释吗?这个解释不会使简单的事情复杂化吗?同样,使用plt.close()删除对象,就是这样,下一个数字从零开始。