解决Pycharm中使用matplotlib绘制中required_interactive_framework报错问题

报错原因

 今天在pycharm中使用matplotlib来绘制bar条形图。结果就出现如上图所示报错。

如下是我的大致代码

import pandas as pd
import matplotlib.pyplot as plt

……

# 绘制柱状图
plt.bar(salary_counts.index, salary_counts.values,width=0.2)

# 显示图片
plt.show()

MatplotlibDeprecationWarning: Support for FigureCanvases without a required_interactive_framework attribute was deprecated in Matplotlib 3.6 and will be removed two minor releases later.这个警告是什么意思呢?

这个错误和警告提示你的 Matplotlib 版本过低,使用了不受支持的 FigureCanvas 的子类实例,并且在将来的 Matplotlib 版本中,该属性将被删除。在调用 plt.bar 函数时,出现了 FigureCanvases without a required_interactive_framework attribute 的警告。

而后面的 traceback 则是由于在检测 GUI 线程时,调用了已经被弃用的 _warn_if_gui_out_of_main_thread 函数。这可能是因为在使用不受支持的 Matplotlib 版本时,与主线程的 GUI 交互可能存在问题。

那如何解决呢?

有如下两种方式:

1.升级 Matplotlib 到最新版本并使用支持 required_interactive_framework 属性的 FigureCanvas 子类实例,同时更改Matplotlib的后端。
Matplotlib有多种后端可供选择,每个后端都有自己的优点和缺点。有些后端支持交互式绘图,而有些后端则更适合生成静态图像。在代码中,我们可以使用以下语句更改Matplotlib的后端:

import matplotlib
matplotlib.use('backend_name')

其中,backend_name是所选择的后端的名称。常用的后端包括:

  • Qt5Agg:使用Qt5作为图形用户界面。
  • GTK3Agg:使用GTK3作为图形用户界面。
  • TkAgg:使用Tk作为图形用户界面。
  • Agg:生成非交互式、静态图像的默认后端。

例如,如果我们想要使用Qt5Agg作为Matplotlib的后端,可以使用以下代码:

import matplotlib
matplotlib.use('Qt5Agg')  # 使用支持 required_interactive_framework 属性的后端
import matplotlib.pyplot as plt

# 此处省略数据清洗逻辑

plt.bar(salary_counts.index, salary_counts.values,width=0.2)

plt.show()

2.不使用plt.show()方式来显示图像,使用agg切换为 non-interactive (不交互)模式

import matplotlib
matplotlib.use('agg')

#省略

plt.savefig('hh.png')

使用plt.savefig('salary_distribution.png')将图像保存为文件。这样,就可以避免与GUI线程相关的错误。

总结

在jupyter中使用matplotlib绘图是正常的,不会报pycharm中这种交互式的错误。所以建议还是使用jupyter这种交互式编译环境来使用matplotlib绘图是最好的。而使用pycharm的话总是会出现各种各样的小问题,真的令人头疼。

猜你喜欢

转载自blog.csdn.net/qq_69218005/article/details/130899101