有没有办法针对特定数组而不是索引绘制 Matplotlib 的 Imshow?



我正在尝试使用iMshow绘制数据的二维傅立叶变换。但是,IMShow绘制了数据与数组中的索引。我想将数据绘制在包含相应频率值的一组数组(每个DIM的数组(上,但无法弄清楚如何。

我有一个2D阵列的数据(高斯脉冲信号(,我用np.fft.fft2转换了傅立叶。这一切都很好。然后,我使用np.fft.fftfreq(len(data((*sampling_rate获得每个维度的相应频率箱。不过,我不知道如何使用IMShow在这些频率上绘制数据。我想使用plt.plot(x,y(而不仅仅是使用plt.plot(y(。

我的第一次尝试是使用IMSHOWS"范围"标志,但是我能说的是FAS,只是更改轴线限制,而不是实际的垃圾箱。

我的下一个解决方案是使用np.fft.fftshift以数值顺序排列数据,然后只需使用以下答案重新缩放轴:更改IMShow的轴刻度。但是,频率箱的索引不是纯缩放因素,通常也有恒定的偏移。

我的尝试是使用2D历史而不是IMShow,但这是行不通的,因为2DHIST绘制了订单对发生的次数,而我想绘制与特定订单对相对应的标量值(即特定频率组合的信号(。

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
f = 200
st = 2500
x = np.linspace(-1,1,2*st)
y = signal.gausspulse(x, fc=f, bw=0.05)
data = np.outer(np.ones(len(y)),y) # A simple example with constant y
Fdata = np.abs(np.fft.fft2(data))**2
freqx = np.fft.fftfreq(len(x))*st # What I want to plot my data      against
freqy = np.fft.fftfreq(len(y))*st
plt.imshow(Fdata) 

我应该看到与信号频率相对应的(200,0(的峰值(有些围绕带宽对应的频率(,但是我的最大值发生在与我的数据中频率索引相对应的某个随机位置处发生大批。如果有人有任何想法,修复或其他功能要使用,我将非常感谢!

我无法运行您的代码,但是我认为您正在寻找extent=imshow()参数。有关更多信息,请参见originextent上的页面。

类似的事情可能会起作用吗?

plt.imshow(Fdata, extent=(freqx[0],freqx[-1],freqy[0],freqy[-1])) 

最新更新