Matplotlib3.0.0及以上版本因backend问题不能显⽰图⽚及解决
UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure. % get_backend())
问题背景
最近在练习的时候,需要⽤matplotlib画图观察数据集,但是图象⽆法显⽰,调⽤fig.show()⽅法也不能显⽰图象。代码如下
环境:python 3.6.3
ide:spyder 3.3.4
matplotlib 版本: 3.0.0
import matplotlib
import matplotlib.pyplot as plt
matrix1,labels = file2matrix(r'../machine learning/machinelearninginaction-master/Ch02/datingTestSet.t
xt',)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(matrix1[:,1],matrix1[:,2])
fig.show()
报错提⽰:UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure. % get_backend())
问题解决
1. stackoverflow上有回答说是因为matplotlib 3.0.0 包中间有bug,升级到更⾼版本或者降级到
2.2.3版本就可以解决问题。但是我将
matplotlib升级到3.1.0,还是不能显⽰图象;⼜把包降回2.2.3,依然不显⽰图象。
2. 所以,只能接着研究报错信息,报错信息说matplotlib包⽤的是后端是ipykernel.pylab.backend_inline,这个后端不⽀持在编译器前
端显⽰。为了⽀持所有的使⽤情形,matplotlib能够产⽣不同的输出,⽽把每⼀个不同输出的能⼒叫做⼀个后端。⽽前端就是⽤户需要处理的代码,如绘图代码,然后后端做的就是所有看不到的⾟苦⼯作来⽣成视图窗⼝。这⾥有两种不同类型的后端:
1.⽤户接⼝后端(⼜叫做"交互式后端",如pygtk, wxpython, thinter,qt, macosx或者fltk)。
2.硬拷贝后端,也叫做⾮交互式后端,⽤来⽣成图像⽂件(PNG,SVG,PDF, PS)
所以matplotlib不显⽰图象就是当前的⽤户接⼝后端不⽀持前端显⽰并交互,所以我们需要⾃⼰配置。
有两种⽅式配置你的后端。
1. 在matplotlibrc⽂件中设置后端参数
2. 另外⼀种⽅式是使⽤matplotlib的use()命令。 调⽤use()⽅法必须在import matplotlib.pyplot或者matplotlib.pylab之前设置
matplotlib中subplot可以使⽤的后端有 [‘GTK3Agg’, ‘GTK3Cairo’, ‘MacOSX’, ‘nbAgg’, ‘Qt4Agg’, ‘Qt4Cairo’, ‘Qt5Agg’,‘Qt5Cairo’, ‘TkAgg’, ‘TkCairo’, ‘WebAgg’, ‘WX’, ‘WXAgg’, ‘WXCairo’, ‘agg’, ‘cairo’, ‘pdf’,‘pgf’, ‘ps’, ‘svg’, ‘template’]
这⾥我选择的是 ‘Qt5Agg’,设置完之后调⽤fig.show()就可以显⽰图⽚了
import matplotlib
matplotlib.use('Qt5Agg')#必须显式指明matplotlib的后端
import matplotlib.pyplot as plt
matrix1,labels = file2matrix(r'../machine learning/machinelearninginaction-master/',)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(matrix1[:,1],matrix1[:,2])
fig.show()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。