You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Savitzky-Golay滤波器搭配matplotlib时无法生成图片的问题

问题根因

该冻结问题是macOS系统下旧版本matplotlib、scipy与系统TeX环境的依赖加载冲突导致的,savgol_filter依赖的线性代数库会和TeX渲染进程抢占环境变量,触发死锁。


可行解决方案

  • 方案1:调整模块导入和配置顺序
    先导入scipy并完成所有数据计算,再配置matplotlib的字体参数和usetex设置,避免依赖加载冲突,示例代码如下:

    from scipy.signal import savgol_filter
    # 先完成所有数据计算逻辑
    y_filt = savgol_filter(y,51,2)
    
    # 再导入matplotlib并完成配置
    from matplotlib import pyplot as plt
    from matplotlib import rc
    
    # 如果要使用Computer Modern字体,把Helvetica替换为'Computer Modern Roman'即可
    rc('font',**{'family':'serif','serif':['Computer Modern Roman']})
    rc('text',usetex=True)
    
    # 绘图逻辑保持不变
    figx = 2
    figy = 4
    fig = plt.figure()
    ax1 = plt.subplot2grid((1,1),(0,0))
    ax1.plot(x,y_filt,color='k',lw=1)
    fig.set_size_inches(figx,figy)
    fig.savefig(dirFigs+'A1_extracted.pdf',dpi=600,bbox_inches='tight')
    
  • 方案2:不启用usetex实现目标字体效果
    跳过TeX渲染直接调用本地字体,从根源避免冲突。如果本地已经安装了Computer Modern或Helvetica字体,直接配置字体参数即可:

    from matplotlib import pyplot as plt
    from matplotlib import rcParams
    
    rcParams['font.family'] = 'serif'
    rcParams['font.serif'] = ['Computer Modern Roman', 'Helvetica'] # 按优先级排列字体
    rcParams['mathtext.fontset'] = 'cm' # 数学公式也使用Computer Modern字体
    
    # 后续计算、绘图逻辑保持不变,不需要启用usetex
    
  • 方案3:升级依赖包修复已知冲突
    当前Python3.8配套的matplotlib、scipy版本较低,可通过Anaconda升级到最新稳定版修复已被修复的依赖冲突:

    conda update matplotlib scipy
    

    同时确保本地TeX环境是完整的MacTeX版本,而非精简版BasicTeX,避免缺少渲染需要的宏包导致进程卡住。


内容的提问来源于stack exchange,提问作者steph c

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:24:02