项目场景:

在 Jupyter Notebook 与 Spyder 中使用 Python 进行遥感数据处理,之前学习一直顺利进行,然后突然一个项目出现此类问题。


问题描述:

  • Jupyter Notebook

  • Spyder
UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

原因分析:

在其他项目都可正常绘图的情况下,则不会是缺少某个库导致的。根本原因是:import导入的某一个库改变了print(matplotlib.get_backend())图像输出位置。该函数正常情况下返回值为module://matplotlib_inline.backend_inline,而被改变为 Agg。

可以用此方法验证:

# 查看正确返回值
import matplotlib
print(matplotlib.get_backend())

# Import packages
import os
print(matplotlib.get_backend())
import urllib
print(matplotlib.get_backend())
import requests
print(matplotlib.get_backend())
import math
print(matplotlib.get_backend())
import matplotlib
print(matplotlib.get_backend())
import matplotlib.pyplot as plt
print(matplotlib.get_backend())
import seaborn as sns
print(matplotlib.get_backend())
import pandas as pd
print(matplotlib.get_backend())
import earthpy as et
print(matplotlib.get_backend())
import hydrofunctions as hf
print(matplotlib.get_backend())

 结果为:

module://matplotlib_inline.backend_inline
module://matplotlib_inline.backend_inline
module://matplotlib_inline.backend_inline
module://matplotlib_inline.backend_inline
module://matplotlib_inline.backend_inline
module://matplotlib_inline.backend_inline
module://matplotlib_inline.backend_inline
module://matplotlib_inline.backend_inline
agg
Requested data from https://waterservices.usgs.gov/nwis/dv/?format=json%2C1.1&sites=06730500&startDT=1946-05-10&endDT=2018-08-29
Requested data from https://waterservices.usgs.gov/nwis/dv/?format=json%2C1.1&sites=06730500
E:\Desktop\Pyhton\plot\test.py:77: UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

可知 import hydrofunctions as hf 改变了matplotlib.get_backend()的返回值,从而出现该错误。


解决方案:

  • Jupyter Notebook

此方法只能解决显示问题,并没有解决问题的根本

  •  Spyder

在 import hydrofunctions as hf 后将 matplotlib.get_backend() 值重新修改会正常值

# Import packages
import os
import urllib
import requests
import math
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import earthpy as et
import hydrofunctions as hf
matplotlib.use('module://matplotlib_inline.backend_inline')

此方法同样可适用于Jupyter Notebook

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐