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

如何在Jupyter Notebook中保存MFCC频谱图时不显示对应绘图

解决Jupyter Notebook保存MFCC频谱图时不显示绘图的方案

Jupyter Notebook默认开启了matplotlib的inline显示模式,只要创建画布就会自动在输出区渲染图像,不需要显式调用plt.show(),所以仅调用plt.savefig依然会触发图像显示。你可以参考以下修正后的实现方案:

import librosa
import librosa.display
import matplotlib.pyplot as plt

# 读取音频
x, sr = librosa.load(file_name, sr=sr)
# 提取MFCC特征
mfcc_feature = librosa.feature.mfcc(y=x, sr=sr)

# 创建画布和坐标系,修复原代码ax未定义的bug
fig, ax = plt.subplots(figsize=(12,8))
# 绘制MFCC频谱图
librosa.display.specshow(mfcc_feature, sr=sr, y_axis='linear', ax=ax)

# 隐藏坐标轴和边框
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
ax.set_frame_on(False)
ax.set_xlabel(None)
ax.set_ylabel(None)

# 保存图像,bbox_inches和pad_inches参数可去除多余白边
plt.savefig('mfcc_image.png', bbox_inches='tight', pad_inches=0)
# 核心:关闭当前画布,阻止Jupyter渲染显示
plt.close()

关键改动说明:

  • 修复原代码bug:原代码仅创建了fig对象没有获取对应的ax坐标系对象,后续操作ax的代码会直接报错,修正为用plt.subplots同时创建画布和坐标系,绘图时指定ax=ax把图画到对应坐标系上。
  • 新增plt.close()语句:在调用plt.savefig之后执行plt.close(),会直接销毁当前创建的画布对象,Jupyter就不会再把这个画布渲染到输出区,这是兼容性最高的实现方案,不会影响其他单元格的绘图功能。
  • 如果需要批量生成大量图片不想每次都写plt.close(),可以在代码块最开头关闭交互模式:
    plt.ioff()
    
    后续需要恢复正常绘图显示时,调用plt.ion()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:39:03