• 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

  • 相关阅读:
    优化软件系统,解决死锁问题,提升稳定性与性能 redis排队下单
    jQuery的事件
    C++学习概述
    C语言技术, 有云控经验最好
    SpringBoot
    C++学习随笔(3)——auto和for
    十、Mysql - 全备份 - 根据二进制日志还原数据
    阿里云函数计算 GPU 宣布降价,最高幅度达 93%,阶梯计费越用越便宜!
    【计算机网络】IP协议
    Mybatis学习之动态Sql
  • 原文地址:https://blog.csdn.net/Julse/article/details/127093899