Python-matplotlib.ticker.FuncFormatter,x轴上的时间刻度错误

时间:2019-10-17 09:52:25

标签: python matplotlib

我正在尝试将样本的x轴刻度转换为mm:ss.decimals格式的时间。这个想法是一秒钟包含fs = 44100个样本,因此转换应该类似于

time.strftime('%S.{}'.format(sample/44.1%1000), time.gmtime(sample/44.1/1000.0)))

这是整个代码:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
import time
import os
import librosa

filename = 'path_to_your_waveform'
s, fs = librosa.load(filename, sr=44100, mono=False)
s=s[0,0:2*fs]

formatter = matplotlib.ticker.FuncFormatter(lambda sample, x: time.strftime('%S.{}'.format(sample/44.1%1000), time.gmtime(sample/44.1/1000.0)))

t_tot = np.arange(0, len(s), 1)
fig, axs = plt.subplots(2, 1, figsize=(10, 10))
for i in np.arange(0,2,1):

    plt.rcParams["agg.path.chunksize"] = 10000
    axs[i].plot(t_tot, s, color='b', linestyle='-')
    axs[i].xaxis.set_major_locator(MultipleLocator(fs/2))
    axs[i].xaxis.set_major_formatter(formatter)

plt.savefig(os.path.join(os.getcwd(), 'name'))

在下图中,您可以看到x轴刻度没有意义(整个文件被精确地剪切为2秒)。

enter image description here

0 个答案:

没有答案