首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Matplotlib中绘制的列表的移位x值

在Matplotlib中绘制的列表的移位x值
EN

Stack Overflow用户
提问于 2012-11-16 19:33:15
回答 2查看 1.8K关注 0票数 1

在对列表(大小为1024)执行快速傅立叶变换和FFTShift之后,我现在正在尝试绘制输出。在尝试以我想要的方式准确地显示数据时,我遇到了一些问题。

当前,x轴显示仓位编号。在FFT移位之后,频率0 Hz处于仓位编号512,并且每个仓位值额外的2000/1024 Hz,因此仓位0应为-1000 Hz,仓位1023应为+1000 Hz;仓位1应为-998.05 Hz,仓位1022应为+998.05,依此类推。

我尝试过使用xticks来显示以下内容:

代码语言:javascript
运行
复制
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个柱子。有没有什么办法可以让我这样做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-16 20:16:11

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

代码语言:javascript
运行
复制
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调整显示的频率范围

票数 3
EN

Stack Overflow用户

发布于 2012-11-18 03:03:54

您还可以使用辅助函数fftfreq,它将为您提供适当缩放的频率。然后,您可以将fftshift应用于fftfreq阵列。如果您随后绘制为

代码语言:javascript
运行
复制
plot(freq,fft_vals)

你会得到你想要的结果。

手动设置x时无法读取xtick值的原因是,您可以将任何内容作为记号标签(如字符串、非单调序列等)放入,因此matplotlib不知道如何在画布上的任意点确定x值(请参阅setting tickslabel in matplotlib disables mouse cursor position)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13415759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档