移动在Matplotlib中绘制的列表的x值

时间:2012-11-16 11:33:15

标签: python matplotlib fft

在列表(大小1024)上执行FFT和FFTShift之后,我现在尝试绘制输出。我尝试按照我想要的方式显示数据时遇到了一些问题。

http://i.imgur.com/HTpiX.png

目前,x轴显示箱号。在FFT移位之后,频率0 Hz在bin编号512处,并且每个bin值额外的2000/1024 Hz,因此bin 0应该是-1000 Hz并且bin 1023应该是+1000 Hz; bin 1应为-998.05 Hz,bin 1022应为+998.05等

我尝试使用xticks来显示:

xlocs, xlabs = plt.xticks()
plt.xticks([0,(len(a)*0.25),(len(a))/2,(len(a)*0.75),len(a)],[(-1000),(-500),0,500,1000])

但是我无法实际读取图表中特定点的x值,而只显示y值和x =。有什么方法可以解决这个问题吗?

此外,我还希望将整个图表向左翻转302个分档。无论如何我能做到吗?

2 个答案:

答案 0 :(得分:3)

您应该更改绘制图形的方式,即在绘制图形之前计算区域中的频率:

import numpy as np
import matplotlib.pyplot as plt

bins = np.arange(-512, 512)
x = 2000.*bins/1024
plt.plot(x, fft_data)

然后,您可以使用plt.xlim

调整显示的频率范围

答案 1 :(得分:1)

您还可以使用辅助函数fftfreq,它将为您提供正确缩放的频率。然后,您可以将fftshift应用于fftfreq数组。如果你然后绘制为

plot(freq,fft_vals)

您将获得所需的结果。

当您手动设置xticks时无法读取x值的原因是您可以将任何作为刻度标签(例如字符串,非单调)序列等)所以matplotlib不知道如何确定画布上任意点的x值(见setting tickslabel in matplotlib disables mouse cursor position)。