Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python绘制直方图,以便x值是光谱的频率?_Python_Matplotlib_Fft_Histogram - Fatal编程技术网

如何使用Python绘制直方图,以便x值是光谱的频率?

如何使用Python绘制直方图,以便x值是光谱的频率?,python,matplotlib,fft,histogram,Python,Matplotlib,Fft,Histogram,我查看了python的“matplotlib.pylab”库,并允许我使用“plt.hist”函数绘制直方图。问题是它只接受一个数据参数,即数组。在我的例子中,我想绘制一个傅里叶变换产生的数据直方图。傅里叶变换显示各种频率的相对数量。所以我可以把这个数量数组放到“plt.hist”中,得到一个信息图表,但是x轴不是以频率为单位的。我的猜测是x轴只是数组的索引,但当我绘制它时,这似乎并不正确。 谢谢,制作X直方图的天真回答,时域信号的DFTX import matplotlib.pyplot as

我查看了python的“matplotlib.pylab”库,并允许我使用“plt.hist”函数绘制直方图。问题是它只接受一个数据参数,即数组。在我的例子中,我想绘制一个傅里叶变换产生的数据直方图。傅里叶变换显示各种频率的相对数量。所以我可以把这个数量数组放到“plt.hist”中,得到一个信息图表,但是x轴不是以频率为单位的。我的猜测是x轴只是数组的索引,但当我绘制它时,这似乎并不正确。 谢谢,

制作
X
直方图的天真回答,时域信号的DFT
X

import matplotlib.pyplot as plt
import numpy as np

...
w = np.linspace(0,N*dw-dw,N)   
plt.bar(w, abs(X), align='center', width=dw)
plt.show()
对于美观的绘图,您必须考虑到
X
与频率
0*dw,1*dw,…(N-1)*dw
相关,并且在美观的绘图中,您通常希望使用范围
-N*dw/2
+N*dw/2
作为横坐标

完整答案 这就是目前为止的结果

正如你所看到的,这种类型的绘图强调了DFT的周期性,但通常是以零频率为中心绘制DFT,可以这样做

w2=np.concatenate((w-N*dw,w))
X2=np.concatenate((X,X)

plt.bar(w2, abs(X2), align='center', width=dw)
plt.xticks([i*8*dw for i in range(-N/16,1+N/16)])
plt.xlim(-dw*N/2,dw*N/2)
plt.show()
这就是结果

后脚本 我描述的过程对于OP需求来说是很好的过程,但是我想说的是,
X
数据是在现场合成的,与现实生活中的DFT没有相似之处。相反,如果我看到上面的曲线图,我会对时域采样率不足做出评论。

制作
X
直方图的天真回答,时域信号的DFT
X

import matplotlib.pyplot as plt
import numpy as np

...
w = np.linspace(0,N*dw-dw,N)   
plt.bar(w, abs(X), align='center', width=dw)
plt.show()
对于美观的绘图,您必须考虑到
X
与频率
0*dw,1*dw,…(N-1)*dw
相关,并且在美观的绘图中,您通常希望使用范围
-N*dw/2
+N*dw/2
作为横坐标

完整答案 这就是目前为止的结果

正如你所看到的,这种类型的绘图强调了DFT的周期性,但通常是以零频率为中心绘制DFT,可以这样做

w2=np.concatenate((w-N*dw,w))
X2=np.concatenate((X,X)

plt.bar(w2, abs(X2), align='center', width=dw)
plt.xticks([i*8*dw for i in range(-N/16,1+N/16)])
plt.xlim(-dw*N/2,dw*N/2)
plt.show()
这就是结果

后脚本 我描述的过程对于OP需求来说是很好的过程,但是我想说的是,
X
数据是在现场合成的,与现实生活中的DFT没有相似之处。相反,如果我看到上面的曲线图,我会对时域采样率不足做出评论。

制作
X
直方图的天真回答,时域信号的DFT
X

import matplotlib.pyplot as plt
import numpy as np

...
w = np.linspace(0,N*dw-dw,N)   
plt.bar(w, abs(X), align='center', width=dw)
plt.show()
对于美观的绘图,您必须考虑到
X
与频率
0*dw,1*dw,…(N-1)*dw
相关,并且在美观的绘图中,您通常希望使用范围
-N*dw/2
+N*dw/2
作为横坐标

完整答案 这就是目前为止的结果

正如你所看到的,这种类型的绘图强调了DFT的周期性,但通常是以零频率为中心绘制DFT,可以这样做

w2=np.concatenate((w-N*dw,w))
X2=np.concatenate((X,X)

plt.bar(w2, abs(X2), align='center', width=dw)
plt.xticks([i*8*dw for i in range(-N/16,1+N/16)])
plt.xlim(-dw*N/2,dw*N/2)
plt.show()
这就是结果

后脚本 我描述的过程对于OP需求来说是很好的过程,但是我想说的是,
X
数据是在现场合成的,与现实生活中的DFT没有相似之处。相反,如果我看到上面的曲线图,我会对时域采样率不足做出评论。

制作
X
直方图的天真回答,时域信号的DFT
X

import matplotlib.pyplot as plt
import numpy as np

...
w = np.linspace(0,N*dw-dw,N)   
plt.bar(w, abs(X), align='center', width=dw)
plt.show()
对于美观的绘图,您必须考虑到
X
与频率
0*dw,1*dw,…(N-1)*dw
相关,并且在美观的绘图中,您通常希望使用范围
-N*dw/2
+N*dw/2
作为横坐标

完整答案 这就是目前为止的结果

正如你所看到的,这种类型的绘图强调了DFT的周期性,但通常是以零频率为中心绘制DFT,可以这样做

w2=np.concatenate((w-N*dw,w))
X2=np.concatenate((X,X)

plt.bar(w2, abs(X2), align='center', width=dw)
plt.xticks([i*8*dw for i in range(-N/16,1+N/16)])
plt.xlim(-dw*N/2,dw*N/2)
plt.show()
这就是结果

后脚本
我描述的过程对于OP需求来说是很好的过程,但是我想说的是,
X
数据是在现场合成的,与现实生活中的DFT没有相似之处。相反,如果我看到上面的图,我会对时域采样率不足做出评论。

我想你对“直方图”的含义有误解<代码>plt.plot采用两个参数(x轴和y轴)。您可以使用它来绘制频谱(或任何您想要的类似fft的输出)与频率的关系。你可能还想看看
plt.bar
@gideonisac傅里叶变换或DFT?我想你对什么是“直方图”有误解<代码>plt.plot采用两个参数(x轴和y轴)。您可以使用它来绘制频谱(或任何您想要的类似fft的输出)与频率的关系。你可能还想看看
plt.bar
@gideonisac傅里叶变换或DFT?我想你对什么是“直方图”有误解<代码>plt.plot采用两个参数(x轴和y轴)。您可以使用它来绘制频谱(或任何您想要的类似fft的输出)与频率的关系。你可能还想看看
plt.bar
@gideonisac傅里叶变换或DFT?我想你对什么是“直方图”有误解<代码>plt.plot采用两个参数(x轴和y轴)。您可以使用它来绘制频谱(或任何您想要的类似fft的输出)与频率的关系。您可能还想看看
pl