matplotlib.subplots创建过慢(超20秒)问题排查求助
问题:Matplotlib plt.subplots在Ubuntu机器上创建图形耗时异常
我日常用Python和Matplotlib做大量数据科学后处理,最近碰到个怪事:两台配置完全一致的Ubuntu22.04机器(Python3.10.12),同一脚本在PC1运行正常,但PC2里plt.subplots()创建图形要25.9秒,PC1只需要0.8秒,后续绘图速度倒是正常。
已经试过这些排查手段:更换Matplotlib版本、检查pandas/numpy等依赖、切换后端(但没有其他可用后端),都没解决,求排查方向。
测试程序
import sys print(f'python v{sys.version}') import time start = time.time() import matplotlib import matplotlib.pyplot as plt v = matplotlib._version.version end = time.time() print(f'matplotlib.v{v} imported in {end-start:.1f} sec') print(f' (from {matplotlib.__file__})') start = time.time() backend = matplotlib.rcParams["backend"] end = time.time() print(f'backend {backend} identified in {end-start:.1f} sec') start = time.time() fig, ax = plt.subplots() end = time.time() print(f'plt.subplots called in {end-start:.1f} sec') plt.show()
PC1运行结果
python v3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] matplotlib.v3.6.2 imported in 0.4 sec (from /volatile/home/XXXX/.local/lib/python3.10/site-packages/matplotlib/__init__.py) backend GTK4Agg identified in 2.4 sec plt.subplots called in 0.8 sec
PC2运行结果
python v3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] matplotlib.v3.6.3 imported in 0.4 sec (from /volatile/home/XXXX/.local/lib/python3.10/site-packages/matplotlib/__init__.py) backend GTK4Agg identified in 2.2 sec plt.subplots called in 25.9 sec
排查方向建议
- 检查GTK4系统依赖:对比两台机器的GTK4相关包版本(用
dpkg -l | grep gtk),比如libgtk-4-1、libgtk-4-bin等,确保PC2的依赖完整且版本匹配。 - 测试无GUI后端:临时设置
export MPLBACKEND=Agg后运行脚本,如果速度恢复,说明问题出在GTK4后端的GUI初始化环节。 - 检查X11显示服务:若远程连接PC2,确认
DISPLAY环境变量正常,尝试在本地终端运行脚本,排除X11转发延迟问题。 - 监控系统资源:运行脚本时用
top/htop查看PC2的CPU、内存、磁盘IO占用,排查是否有进程阻塞资源。 - 重置Matplotlib配置:删除PC2的
~/.config/matplotlib/目录,恢复默认配置后测试。 - 优化字体加载:在脚本开头添加
plt.rcParams['font.family'] = 'DejaVu Sans',指定单一字体,排查字体扫描慢的问题。
内容的提问来源于stack exchange,提问作者FredJ
相关产品推荐
相关产品推荐

