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

Librosa.display绘制的STFT频谱图弹窗闪现后消失的问题排查

问题与解答

问题描述

参考Librosa官方文档中的示例代码绘制STFT频谱图时,频谱图窗口仅短暂弹出后立刻消失,无法正常显示。请问是否需要显式调用方法来展示代码中的img对象?若不需要,可能是什么原因导致绘图无法正常显示?

问题代码

# 读取.wav文件
audio, sample_rate = librosa.load("/Users/user/Desktop/voice.wav")

# 使用librosa执行STFT
audio_stft_1000 = np.abs(librosa.stft(audio, n_fft=1000))
audio_stft_3000 = np.abs(librosa.stft(audio, n_fft=3000))

# 根据文档创建绘图
fig, ax = plt.subplots()

img = librosa.display.specshow(librosa.amplitude_to_db(audio_stft_1000,
                                                       ref=np.max),
                               y_axis='log', x_axis='time', ax=ax)

ax.set_title('Power spectrogram')
fig.colorbar(img, ax=ax, format="%+2.0f dB")

解答

不需要显式调用方法展示img对象——它只是specshow返回的图像句柄,作用是关联色条,和窗口显示完全无关。窗口一闪就消失的核心问题出在:Matplotlib绘图完成后程序直接退出,导致窗口被自动销毁。

解决方法很直接:

  • 在代码末尾添加一行plt.show():这是Matplotlib用来阻塞程序、保持绘图窗口显示的关键命令,没有它的话,绘图任务完成后程序就会立刻结束,窗口自然跟着关闭。
  • 如果是在Jupyter Notebook环境中,要确保开头添加了%matplotlib inline(把图嵌入单元格)或者%matplotlib notebook(支持交互式显示)的魔法命令。

另外还有几个可能的次要原因:

  • 检查代码后续是否有提前终止程序的语句,比如sys.exit()之类的操作。
  • 确认Matplotlib的后端配置正常,部分环境默认后端可能不支持窗口显示,可以尝试切换后端,比如添加plt.switch_backend('TkAgg')(需要先安装对应后端库)。

内容的提问来源于stack exchange,提问作者John Harrington

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:26:13