Matplotlib matplotlib.pyplot 时卡顿或者一直卡在那里的问题
背景
Matplotlib 是 Python 下最流行的可视化库之一,它广泛用于数据可视化、科学计算、机器学习等领域,因为它提供了非常丰富的图形绘制功能。但是在有些情况下,我们在使用 Matplotlib 时可能会遇到 import matplotlib.pyplot 时卡顿或者一直卡在那里的问题,那么这个问题产生的原因是什么?又该如何避免和解决呢?下面将会详细阐述。
阅读更多:Matplotlib 教程
Matplotlib 简介
Matplotlib 是一个基于 Python 的绘图库,提供了一系列丰富的绘图工具,用户可以使用 Matplotlib 将数据可视化,帮助了解数据、发现数据的规律和问题,从而进行分析和处理。Matplotlib 支持多种图像类型,如线形图、柱状图、饼图、散点图、等高线图等,可以用于展示不同数据类型,并对数据进行比较和分析。
Matplotlib 可以通过以下方式进行安装:
问题现象
在使用 Matplotlib 绘图时,有时候会在 import matplotlib.pyplot 时遇到 hangs 的情况,具体表现为程序启动后卡在了这一步,没有后续的反应和输出,也没有错误提示。这种情况有时出现,有时不出现,很难进行 debug 和分析。
问题原因
造成这种 hangs 的问题可能有多种原因,以下是一些常见的原因:
1. 缺少依赖库
Matplotlib 依赖众多的第三方库进行图像绘制,如 PyQt5, Qt, sip 等。如果没有正确安装这些依赖库,就会出现 hangs 的问题。
这种情况下可以使用以下命令查看 Matplotlib 的依赖库是否缺失:
如果输出的是 “TkAgg”,则说明 Matplotlib 不缺失依赖库;如果输出的是 “agg”,则说明 Matplotlib 缺失了类似 PyQt5, Qt, sip 等依赖库。
2. 缺少字体文件
Matplotlib 使用字体来渲染文字,如果缺少字体文件,就会出现 hangs 的问题。
查看是否缺少字体文件可以运行以下命令:
如果缺少字体文件,会返回提示信息 “UserWarning: Matplotlib is currently using a non-GUI backend, so cannot show the figure”,并且没有弹出绘图窗口。
3. 显示设备冲突
Matplotlib 使用系统默认显示设备渲染,如果出现了显示设备冲突,也会出现 hangs 的问题。
这种情况下可以使用以下命令验证是否存在显示设备冲突:
如果出现警告 “UserWarning: Matplotlib is currently using a non-GUI backend, so cannot show the figure”,则说明存在显示设备冲突。
解决方法
有了问题现象和可能的原因,我们就可以根据具体情况来采取相应的解决方法了。
1. 安装依赖库
在 Matplotlib 安装完成后,一般会自动安装相关依赖库,但是有时候在安装过程中可能会出现问题,或者用户手动卸载了一些依赖库而忘记重新安装。这时候需要手动安装相关依赖库,避免 hangs 的问题。
以 PyQt5 为例,可以使用以下命令安装:
2. 安装字体文件
Matplotlib 自带了一些字体文件,但是如果系统缺失一些字体文件,就需要手动安装。可以在系统自带的字体目录下找到需要的字体文件,然后将其复制到 Matplotlib 的字体目录下。
Matplotlib 的字体目录可以通过以下命令获取:
可以将需要的字体文件复制到这个目录下的 fonts/ttf 子目录中,然后重新尝试绘图,如果成功弹出了绘图窗口,则说明安装成功。
3. 更改显示设备
如果存在显示设备冲突,需要更改显示设备。可以在 Matplotlib 中设置使用的显示设备为 TkAgg,而不是默认的系统显示设备。
可以在代码开头添加以下几行:
这样可以确保 Matplotlib 使用正确的显示设备进行渲染,避免 hangs 的问题。
总结
Matplotlib 是 Python 中最流行的可视化库之一,但是在使用时可能会遇到 hangs 的问题,造成这种问题的原因包括缺失依赖库、缺失字体文件和显示设备冲突等。可以根据具体情况来采取相应的解决方法,如安装依赖库、安装字体文件或更改显示设备等。以此来避免 Matplotlib 的 hangs 问题,更好地使用 Matplotlib 绘制图形。