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

如何将Matplotlib绘图X轴从采样数转换为时间(秒)?

解决音频时域图X轴从采样数转时间的问题

方法1:直接基于时间数组绘图(推荐)

不用事后调整刻度,直接生成每个采样点对应的时间序列,用它作为x轴输入绘图,一步到位避免刻度不匹配问题。

代码示例:

import scipy.io.wavfile as wav
import matplotlib.pyplot as plt
import numpy as np

# 读取音频文件
sample_rate, audio_data = wav.read("your_audio.wav")

# 生成时间数组:每个采样点的时间 = 采样索引 / 采样率
time = np.arange(len(audio_data)) / sample_rate

# 绘制时域振幅图
plt.plot(time, audio_data)
plt.xlabel("时间(秒)")
plt.ylabel("振幅")
plt.show()

绘图后X轴直接显示时间,matplotlib会自动生成合适的刻度,无需手动调整。

方法2:修正plt.xticks的用法

如果已经用采样数完成绘图,想手动替换刻度,必须保证刻度位置和刻度标签的数量完全一致。

比如要显示0-4秒的刻度,对应的采样位置是0、48000、96000、144000、192000,对应时间标签是["0", "1", "2", "3", "4"],两者数量对应就不会报错。

代码示例:

import scipy.io.wavfile as wav
import matplotlib.pyplot as plt

sample_rate, audio_data = wav.read("your_audio.wav")

# 用采样数绘制初始图
plt.plot(audio_data)

# 指定刻度位置和对应标签
tick_positions = [0, 48000, 96000, 144000, 192000]
tick_labels = ["0", "1", "2", "3", "4"]
plt.xticks(tick_positions, tick_labels)

plt.xlabel("时间(秒)")
plt.ylabel("振幅")
plt.show()

你之前报错是因为误将所有192000个采样点设为刻度位置,却只给了4个标签,数量不匹配导致ValueError,按上述方式指定对应位置和标签即可解决。

内容的提问来源于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 08:40:36