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

使用Python绘制目标样式频谱图求助:pcolormesh绘制结果异常

频谱图绘制修正方案

你的问题不是pcolormesh函数的问题,而是缺少功率谱的分贝转换及配色、细节调整,以下是匹配目标效果的代码:

from scipy.signal import spectrogram
import matplotlib.pyplot as plt
import numpy as np

# 计算原始频谱
f, t, Sxx = spectrogram(sound, sample_rate)
# 转换为分贝刻度(解决线性功率无法体现明暗对比的问题)
Sxx_dB = 10 * np.log10(Sxx + 1e-10)  # 加极小值避免log(0)报错

# 绘制频谱图
plt.pcolormesh(t, f, Sxx_dB, cmap='viridis')  # viridis配色接近目标图的深色风格
plt.ylabel('Frequency (Hz)')
plt.ylim(top=500)
plt.xlabel('Time (s)')
plt.colorbar(label='Power (dB)')  # 添加颜色条对应分贝值,匹配目标图的标注
plt.show()

核心调整说明:

  • 分贝转换:目标图的颜色是对数刻度的分贝值,线性的Sxx无法呈现低频强、高频弱的明暗对比,转换后才能对齐视觉效果。
  • 配色选择:默认配色和目标图差异大,viridis/inferno这类配色更接近目标图的深色系表现。
  • 容错处理:+1e-10防止频谱中出现0值导致对数计算报错。

如果目标图的频率轴是对数刻度,额外添加:

plt.yscale('log')
plt.ylim(bottom=20, top=500)  # 适配对数刻度的范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:35:48