Matplotlib 如何消除警告
当我们在使用Matplotlib绘图时,有时会出现警告信息。例如,当我们使用plot()
函数绘制图形时,如果未指定图形样式,则会出现警告:UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure
。然而,有时候我们希望将这些警告信息消除掉,以便更好地了解绘图结果。那么,Matplotlib如何消除警告呢?
阅读更多:Matplotlib 教程
消除警告的方法
消除Matplotlib警告的方法很简单,只需要添加一行代码即可。例如,当我们需要绘制一幅图像时,我们可以这样写:
import matplotlib.pyplot as plt
plt.plot([1,2,3],[4,5,6])
plt.show()
运行以上代码,我们可以得到一幅图像,但同时也会出现警告信息:
UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure
为了消除这个警告信息,我们只需要添加以下代码即可:
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
plt.plot([1,2,3],[4,5,6])
plt.show()
运行以上代码,我们可以得到同样的图像,但是不再有警告信息输出。上述代码中,warnings.filterwarnings("ignore")
这一行即为消除警告信息的代码。
需要注意的是,消除警告信息并不总是明智的选择。有时候警告信息反而可以帮助我们更好地解决问题。因此,在消除警告信息时需要斟酌。
示例说明
下面通过几个示例来说明如何消除Matplotlib的警告信息。
示例一:消除绘制中文时出现的警告信息
有时候我们在绘制图像时需要使用中文,但是当我们使用中文时会出现警告信息:
MatplotlibDeprecationWarning:
The text.latex.unicode rcparam was deprecated in Matplotlib 3.3 and will be removed two minor releases later.
这是因为Matplotlib的文本渲染引擎不支持中文字符。为了消除这个警告信息,我们可以使用以下代码:
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import warnings
warnings.filterwarnings("ignore")
font_path = "/System/Library/Fonts/STHeiti Light.ttc"
prop = fm.FontProperties(fname=font_path)
plt.plot([1,2,3],[4,5,6])
plt.title("中文标题", fontproperties=prop)
plt.xlabel("横坐标", fontproperties=prop)
plt.ylabel("纵坐标", fontproperties=prop)
plt.show()
在上述代码中,我们使用了matplotlib.font_manager
模块来指定中文字体。通过这种方式,我们可以在绘制图像时使用中文,同时消除警告信息。
示例二:消除Matplotlib版本更新时出现的警告信息
当我们使用的Matplotlib版本比当前最新版本要旧时,有时候会出现版本更新警告信息:
MatplotlibDeprecationWarning:
Adding an axes using the same arguments as a previous axes currently reuses the earlier instance. In a future version, a new instance will always be created and returned. Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
这是因为在新版Matplotlib中,添加新的axes实例需要指定唯一的标签(label)参数,以避免名称冲突。为了消除这个警告信息,我们可以使用以下代码:
import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
import warnings
warnings.filterwarnings("ignore")
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_xlabel('横坐标')
ax.set_ylabel('纵坐标')
with cbook.get_standard_colors() as colors:
for j, color in enumerate(colors):
ax.plot([j, j + 1], [j, j + 1], c=color)
plt.show()
在新版Matplotlib中,我们需要在创建新的axes实例时指定唯一的标签参数。因此,为了消除警告信息,我们需要在代码中添加label="xxx"
这样的参数。
总结
本文介绍了Matplotlib如何消除警告信息。在代码编写中,警告信息既有时候可以帮助我们更好地解决问题,也有时候只是干扰我们浏览结果。因此,在消除警告信息时,我们需要斟酌。希望本文对你有所帮助!