提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、问题: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等许多库的依赖库,版本太低或太高都会影响运算。
虽然折腾,但以后,遇到问题又多了一个思路,也不失为一个新的收获!
如果有帮到你,不妨解决完问题,过来点个赞!