【发布时间】:2021-11-28 06:39:29
【问题描述】:
我的信号从 -1 秒开始。
但是,在绘制频谱图时,第一个 bin 边缘从 0 开始(中点在 0.25)如何更改它以便在 x 轴上绘制时准确地表示我的数据?
使用xextent=(time[0] + 0.125, time[-1]) 似乎可以解决这个问题。但是,我不确定是什么变量决定了 bin 宽度,因此担心这可能会随着不同采样率、点数等的其他数据集而改变。
示例代码:
import numpy as np
import matplotlib.pyplot as plt
import signal
time = np.linspace(-1, 16, 65536)
signal = np.sin(2 * np.pi * time)
fig = plt.figure()
ax_top = fig.add_subplot(211)
ax_spec = fig.add_subplot(212)
ax_top.plot(time, signal)
ax_top.set_xlim(-1, 10)
ax_spec.set_xlim(-1, 10)
Pxx, freqs, bins, cax = ax_spec.specgram(signal, NFFT=2048, Fs=4096, noverlap=2048 / 2, mode='magnitude', pad_to=2048 * 16)
ax_spec.set_xticks(np.arange(time[0], time[-1], 1))
ax_top.set_xticks(np.arange(time[0], time[-1], 1))
plt.show()
【问题讨论】:
-
显示绘图代码。你可以随心所欲地制作你的 x 数据
-
这似乎是一个愚蠢的问题,但 Bins 是频谱图函数的输出,然后将其绘制在 x 轴上。但是如何在绘制 bins 数组之前对其进行修改?理想情况下,我会在绘制之前从 bins 数组中减去 1。
-
你可以绘制
bins + time[0] -
你能发一个minimal reproducible example吗?所以随机生成的数据集,用于 x 数据的 linspace 左右,以及足够的代码来制作上面的图,没有任何额外的东西?在发布答案之前,我想了解情节中的不同元素。
-
我认为这不是正确的方法。
xextent可能是要走的路,因为它会通知imshow的extent,但我想在回答之前先玩一下。您能否发布上面的 MCVE,而不是您的项目特定示例?
标签: python matplotlib signal-processing spectrogram