解决matplotlib警告问题:“Support for FigureCanvases without a required_interactive_framework“

警告内容

在用matplotlib进行绘图时出现如下警告:

MatplotlibDeprecationWarning: Support for FigureCanvases without a required_interactive_framework attribute was deprecated in Matplotlib 3.6 and will be removed two minor releases later.

原始代码

这里我是想对digits数据集进行PCA降维,并想绘图查看降维效果,结果出现了开头的警告,但是可以画出图来,于是我查了一下,发现是版本问题。

from sklearn import datasets
import matplotlib.pyplot as plt

# 加载数据
data = datasets.load_digits()
import numpy as np
# 数据划分x/y
x=data.data
y=data.target

# 直接调用sklearn的主成分分析函数
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
newdata = pca.fit_transform(x,y)

# 利用主成分分析步骤计算
n = 2 # 确定降维维数
mean = np.mean(x,axis=0)  # 按列取平均
norm_data = x - mean  # 均值归一化
cov = np.cov(norm_data,rowvar=False) # 计算协方差矩阵,每一列代表一个特征
evalue , evector = np.linalg.eig(cov) # 计算特征值和特征向量
index = np.argsort(evalue) #特征值从大到小排序,index为对应下标
n_index = index[-n:]
n_vec = evector[:,n_index] # 取最大的n维特征值对应的特征向量构成映射P矩阵
newdata1 = np.dot(norm_data, n_vec)

x0 = newdata[y == 0]
x1 = newdata[y == 1]
x2 = newdata[y == 2]
x3 = newdata[y == 3]
x4 = newdata[y == 4]
x5 = newdata[y == 5]
x6 = newdata[y == 6]
x7 = newdata[y == 7]
x8 = newdata[y == 8]
x9 = newdata[y == 9]
plt.scatter(x0[:, 0], x0[:, 1], c = "red", marker='o')
plt.scatter(x1[:, 0], x1[:, 1], c = "green", marker='o')
plt.scatter(x2[:, 0], x2[:, 1], c = "blue", marker='o')
plt.scatter(x3[:, 0], x3[:, 1], c = "m", marker='o')
plt.scatter(x4[:, 0], x4[:, 1], c = "yellow", marker='o')
plt.scatter(x5[:, 0], x5[:, 1], c = "cyan", marker='o')
plt.scatter(x6[:, 0], x6[:, 1], c = "black", marker='o')
plt.scatter(x7[:, 0], x7[:, 1], c = "white", marker='o')
plt.scatter(x8[:, 0], x8[:, 1], c = "purple", marker='o')
plt.scatter(x9[:, 0], x9[:, 1], c = "brown", marker='o')

plt.tight_layout()
plt.show()

解决办法

网上一些博主写的降低版本啥的,我个人认为是有些麻烦,因此我在处理时直接切换后端:在代码的第二行后面加上一句plt.switch_backend('TkAgg')即可:

from sklearn import datasets
import matplotlib.pyplot as plt
plt.switch_backend('TkAgg')

除了TkAgg,还有别的后端,当然,不同的后端的使用也会有不同的要求,还需根据自己需求进行调整。

1. Agg:使用反走样技术生成PNG图像。
2. GTK3Agg:使用GTK3库在GTK3应用程序中渲染绘图。
3. QtAgg:使用Qt库在Qt应用程序中渲染绘图。
4. WXAgg:使用wxPython库在wxWidgets应用程序中渲染绘图。
5. MacOSX:在Mac OS X系统中使用内置的渲染器渲染绘图。
6. WebAgg:将绘图保存为HTML页面,可以在Web浏览器中查看。
7. SVG:将绘图保存为SVG矢量图像。

更改之后运行就不会出现警告了。

TkAgg:

 WebAgg:

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
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库的,它在3.6版本后开始弃用了对没有required_interactive_framework属性的FigureCanvases的支持,并且在未来的两个小版本中将会删除这种支持。 要解决这个警告,你可以尝试以下几种方法: 1. 确保你使用的是Matplotlib 3.6或更高版本,如果不是,请更新到最新版本。 2. 检查你的代码,查找使用了plt.show()方法的地方,并尝试修改为更现代的方法,以避免产生警告。例如,你可以考虑使用plt.pause()来暂停绘图,或者将绘图保存到文件而不是显示在屏幕上。 3. 如果你在交互式环境(如Jupyter Notebook)中使用Matplotlib,你可以尝试使用%matplotlib魔法命令来配置交互式绘图。 4. 如果你确定你的代码没有其他问题,且确实需要使用plt.show()来显示绘图,你可以忽略这个警告。 另外,有用户提供了一个解决方案,如果你使用的是PyCharm IDE,你可以打开设置,然后在"Tools"中找到"Python Scientific",取消选中"Show plots in tool window"选项,并点击应用,这样就可以将图片直接显示在Windows窗口而不是PyCharm的工具窗口中。记得在代码后面加上plt.show()才能正常显示图片。 希望以上方法能够帮助你解决这个警告问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值