我正在使用 matplotlib.pyplot.specgram 和 matplotlib.pyplot.pcolormesh 制作地震信号的频谱图。 使用 pcolormesh 的原因是我需要在频谱图数据数组上进行算术运算,然后重新绘制结果频谱图(对于三分量地震图 - 东、北和垂直 - 我需要计算水平频谱幅度并将垂直频谱除以水平频谱)。使用频谱图数组数据比单个振幅频谱更容易完成这项工作。
但是我发现,在进行算术操作后,频谱图的绘制结果有意外值。进一步调查后发现,使用 pyplot.specgram 方法制作的频谱图与使用 pyplot.pcolormesh 制作及其返回的数据数组中的值不同。两个绘图/数组应该包含相同的值,但我无法弄清楚为什么它们不同。
例如: 绘制的图形为:
尽管“PxN”数据数组(即每个段的频谱图数据值)是由第一种方法生成并在第二种方法中重复使用,但仍然存在这种情况。您是否知道为什么会发生这种情况?顺便说一句,我意识到我的NFFT值不是平方数,但在我的编码阶段这并不重要。此外,我不知道“imN”数组(pyplot.specgram的第四个返回变量)是什么以及它的用途...
但是我发现,在进行算术操作后,频谱图的绘制结果有意外值。进一步调查后发现,使用 pyplot.specgram 方法制作的频谱图与使用 pyplot.pcolormesh 制作及其返回的数据数组中的值不同。两个绘图/数组应该包含相同的值,但我无法弄清楚为什么它们不同。
例如: 绘制的图形为:
plt.subplot(513)
PxN, freqsN, binsN, imN = plt.specgram(trN.data, NFFT = 20000, noverlap = 0, Fs = trN.stats.sampling_rate, detrend = 'mean', mode = 'magnitude')
plt.title('North')
plt.xlabel('Time [s]')
plt.ylabel('Frequency [Hz]')
plt.clim(0, 150)
plt.colorbar()
#np.savetxt('PxN.txt', PxN)
看起来与情节不同
plt.subplot(514)
plt.pcolormesh(binsZ, freqsZ, PxN)
plt.clim(0,150)
plt.colorbar()
尽管“PxN”数据数组(即每个段的频谱图数据值)是由第一种方法生成并在第二种方法中重复使用,但仍然存在这种情况。您是否知道为什么会发生这种情况?顺便说一句,我意识到我的NFFT值不是平方数,但在我的编码阶段这并不重要。此外,我不知道“imN”数组(pyplot.specgram的第四个返回变量)是什么以及它的用途...
trN
的示例,让其他人能够重现你的问题吗? - tmdavison