【Python技巧】解决matplotlib无法显示图像的问题:numpy惹的祸

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、问题:df.plot() 显示不出图像
  • 二、尝试各种解决办法
  • 1. 增加matplotlib.use,设定GUI
  • 2. 升级matplotlib版本
  • 三、numpy是个重要的库
  • 1. 检查numpy版本
  • 2. 查看可用版本
  • 3. 卸载老版本,安装最新版本
  • 4. 既然2.x版本的不行,再换下1.x版本
  • 总结

  • 前言

    Python3.10 使用matplotlib绘图,显示不出图像。首先排除代码的问题,因为使用Python3.8的虚拟环境显示是OK的,换到Python3.10却不行。为什么,折腾了好久,终于让我找到原因了。

    这里分享一下,希望可以帮助到大家。


    一、问题:df.plot() 显示不出图像

    import numpy as np
    import pandas as pd
    pd.options.mode.copy_on_write = True
    import matplotlib.pyplot as plt
    from Ashare import *
    
    def plot_draw_kline(code):
        df = get_price(code,frequency='1d',count=500)
        df['date'] = df.index
        df.plot(x='date', y=['close'], grid=True)
        plt.show()
    
    if __name__ == '__main__':
        code = 'sz000099'
        plot_draw_kline(code)
    

    运行完,什么图也没渲染出来,可以看见Figer窗口,但一闪而过就结束了。

    二、尝试各种解决办法

    1. 增加matplotlib.use,设定GUI

    使用matplotlib时经常发生plt.show()之后不显示图像的情况,查网上说,是没有后台gui所致。print(matplotlib.get_backend()) 后发现后台QtAgg,在代码中添加以下3行代码。

    import matplotlib
    print(matplotlib.get_backend())
    matplotlib.use('QtAgg')
    

    修改后如下:

    import numpy as np
    import pandas as pd
    pd.options.mode.copy_on_write = True
    import matplotlib
    print(matplotlib.get_backend())
    matplotlib.use('QtAgg')
    import matplotlib.pyplot as plt
    from Ashare import *
    
    def plot_draw_kline(code):
        df = get_price(code,frequency='1d',count=500)
        df['date'] = df.index
        df.plot(x='date', y=['close'], grid=True)
        plt.show()
    
    if __name__ == '__main__':
        code = 'sz000099'
        plot_draw_kline(code)
    

    可修改完,问题依旧…

    2. 升级matplotlib版本

    其次想到的是更新matplotlib ,将从matplotlib-3.7.0版本更新到matplotlib-3.8.4。

    pip install matplotlib -U -i http://pypi.douban.com/simple
    

    升级完,问题依旧…

    实在不行,卸载了重新安装。

    pip uninstall matplotlib
    pip install matplotlib -i http://pypi.douban.com/simple
    

    问题依旧。

    三、numpy是个重要的库

    安装matplotlib 默认会顺带安装numpy,会不会numpy版本的问题?

    1. 检查numpy版本

    pip show numpy查看版本为1.24.3。

    (base) C:\Users\Administrator>pip show numpy
    Name: numpy
    Version: 1.24.3
    

    2. 查看可用版本

    使用命令pip install numpy==1000 ,故意输入一个不存在的版本,会显示所有可用版本。

    (base) C:\Users\Administrator>pip install numpy==1000
    ERROR: Could not find a version that satisfies the requirement numpy==1000 (from versions: 1.3.0, 1.4.1, 1.5.0, 1.5.1, 1.6.0, 1.6.1, 1.6.2, 1.7.0, 1.7.1, 1.7.2, 1.8.0, 1.8.1, 1.8.2, 1.9.0, 1.9.1, 1.9.2, 1.9.3, 1.10.0.post2, 1.10.1, 1.10.2, 1.10.4, 1.11.0, 1.11.1, 1.11.2, 1.11.3, 1.12.0, 1.12.1, 1.13.0, 1.13.1, 1.13.3, 1.14.0, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.14.5, 1.14.6, 1.15.0, 1.15.1, 1.15.2, 1.15.3, 1.15.4, 1.16.0, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.16.6, 1.17.0, 1.17.1, 1.17.2, 1.17.3, 1.17.4, 1.17.5, 1.18.0, 1.18.1, 1.18.2, 1.18.3, 1.18.4, 1.18.5, 1.19.0, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.19.5, 1.20.0, 1.20.1, 1.20.2, 1.20.3, 1.21.0, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.22.0, 1.22.1, 1.22.2, 1.22.3, 1.22.4, 1.23.0rc1, 1.23.0rc2, 1.23.0rc3, 1.23.0, 1.23.1, 1.23.2, 1.23.3, 1.23.4, 1.23.5, 1.24.0rc1, 1.24.0rc2, 1.24.0, 1.24.1, 1.24.2, 1.24.3, 1.24.4, 1.25.0rc1, 1.25.0, 1.25.1, 1.25.2, 1.26.0b1, 1.26.0rc1, 1.26.0, 1.26.1, 1.26.2, 1.26.3, 1.26.4, 2.0.0b1, 2.0.0rc1)
    ERROR: No matching distribution found for numpy==1000
    

    3. 卸载老版本,安装最新版本

    先卸载再安装

    pip uninstall numpy
    pip install numpy==2.0.0rc1
    

    结果如下:

    (base) C:\Users\Administrator>pip uninstall numpy
    Found existing installation: numpy 1.24.3
    Uninstalling numpy-1.24.3:
      Would remove:
        d:\programdata\anaconda3\lib\site-packages\numpy-1.24.3.dist-info\*
        d:\programdata\anaconda3\lib\site-packages\numpy\*
        d:\programdata\anaconda3\scripts\f2py-script.py
        d:\programdata\anaconda3\scripts\f2py.exe
    Proceed (Y/n)? y
      Successfully uninstalled numpy-1.24.3
    
    (base) C:\Users\Administrator>pip install numpy==2.0.0rc1
    

    一顿操作后,运行代码,奇迹还是没有出现。

    4. 既然2.x版本的不行,再换下1.x版本

    这里就换下1.26.4版本试试,不行就再降低一个版本。

    pip uninstall numpy
    pip install numpy==1.26.4
    

    命令行运行完毕,再次运行Python程序,这次竟然成功了(喜出望外)!


    总结

    几经折腾,看来不是Python 3.10 的问题,问题出在各种库的互相配合上。虽然通过虚拟一个低版本的python环境也可以解决matplotlib显示的问题。但作为研究,我们还是要深入一些。numpy作为科学运算一个重要的库,是pandas等许多库的依赖库,版本太低或太高都会影响运算。

    虽然折腾,但以后,遇到问题又多了一个思路,也不失为一个新的收获!

    如果有帮到你,不妨解决完问题,过来点个赞!

    作者:IT里的交易员

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python技巧】解决matplotlib无法显示图像的问题:numpy惹的祸

    发表回复