pycharm 无法显示matplotlib的绘图 - 查询显示绘图的backend - Agg -module://backend_interagg

官方示例图
https://www.osgeo.cn/matplotlib/gallery/index.html

import matplotlib as mpl
mpl.use(‘module://matplotlib_inline.backend_inline’) # jupyter notebook
mlp.use(‘Agg’) # 切换backend,常用于服务器上生成图片,无法直接显示图片
mpl.use(‘module://backend_interagg’) # pycharm 中生成图片

问题描述

使用pycharm写代码,导入的包多了之后,命令 plt.show() 不工作

可能的原因

其他包设置了matplotlib 的backend 为 ‘Agg’ 模式,导致图片只能保存,不会显示
如其他的包设置了‘Agg’ 为backend

mlp.use('Agg') # 切换backend,常用于服务器上生成图片,无法直接显示图片

解决办法

参考博文:“matplotlib.use(‘agg‘)“语句的作用机理 中的解决办法

先查询当前的backend

import matplotlib
matplotlib.get_backend()

发现输出是‘Agg’,需要切换backend

import matplotlib as mpl
mpl.use('Qt5Agg')
import matplotlib.pyplot as plt

但是设置为“Qt5Agg”报错

ImportError: Cannot load backend 'Qt5Agg' which requires the 'qt5' interactive framework, as 'headless' is currently running

成功解决

结合前面的尝试发现,pycharm中plt无法显示图片,是因为导入的其他包修改了绘图的backend,因此需要新建一个简单的python文件(以减少导入的其他包改变backend)查询默认的backend。然后在目标代码中将backend修改成查询到的backend即可。

  • 新建.py 文件查询backend
import matplotlib
matplotlib.get_backend() # 输出: 'module://backend_interagg'
  • 在目标代码绘图中设置backend
import matplotlib as mpl
mpl.use('module://backend_interagg') # 设置为查询到的backend
import matplotlib.pyplot as plt 

然后绘图
在这里插入图片描述

import matplotlib.pyplot as plt
x = list(range(15))
y1 = list(map(lambda e: 6-e,x[:5]))
y2 = list(map(lambda e: e,x[5:]))
plt.plot(x,y1+y2)
plt.show()

总结

  1. 缺失一些支持图形化界面的包的时候(如服务器上运行),如果只想将图片输出到文件,用Agg就行

    mlp.use('Agg') # 切换backend,常用于服务器上生成图片,无法直接显示图片
    
  2. 如果想在代码运行的时候,显示图片,则要根据系统的实际情况设置backend。在没有导入其他包的情况下查询到的backend一般就是可以显示图像的。

    mpl.use('module://backend_interagg')
    

jupyter中的backend

module://matplotlib_inline.backend_inline

pycharm中交互式界面中的backend

module://backend_interagg

其他推荐

官网对于断轴的介绍
https://www.osgeo.cn/matplotlib/gallery/subplots_axes_and_figures/broken_axis.html

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值