python - Python - matplotlib.ticker.FuncFormatter,x 轴上错误的时间刻度
问题描述
我正在尝试以 mm:ss.decimals 格式将 x 轴刻度从样本转换为时间。这个想法是一秒钟包含 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 秒)。
解决方案
推荐阅读
- github - 如何不将“.env”文件推送到 Github 存储库?
- python - 我对 django-mptt 有问题。我是第一次使用 django-mptt,但出现以下错误
- javascript - 无法更改我正在获取的 API url 的页码 (JavaScript)
- timer - 翻转中断是什么意思?
- cron - 如何从 8:20-23:00 每小时每 20 分钟运行一次 CronJob?
- android - 我的回收站视图是空的,即使它包含数据
- javascript - 如何更改/隐藏/删除 Qt Installer 的标题?
- matlab - 在 Pari-GP 中嵌套特定的递归
- c - C中动态内存分配器的自定义实现
- stata - 统计因子变量可能不包含分类变量中的负值