如何将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
相关产品推荐
相关产品推荐

