【问题标题】:ValueError: view limit minimum -36761.69947916667 is less than 1 and is an invalid Matplotlib date value.ValueError: view limit minimum -36761.69947916667 is less than 1 and is a invalid Matplotlib date value.
【发布时间】:2019-03-22 22:56:20
【问题描述】:

我使用这个代码部分;

df = pd.read_csv('Vertikale_Netzlast_2013.csv', header=6, sep=';', parse_dates=[[0, 1]], index_col=0, na_values=['n.v.'])
df.columns = ["time", "Load"]
df.Load = df.Load.interpolate()
plt.figure(figsize=(14, 5))
df.Load.plot()
plt.title('Vertical Grid Load Germany 2013')
plt.ylabel('Power [$MW$]')
plt.savefig('VerticalGridLoadGermany2013.png', bbox_inches='tight', dpi=150, transparent=True)
hann = np.hanning(len(df.Load.values))
Y = np.fft.fft(hann * df.Load.values)
N = ceil(len(Y) / 2 + 1)
print(N)
fa = 1.0 / (15.0 * 60.0) # every 15 minutes
print('fa=%.4fHz (Frequency)' % fa)
X = np.linspace(0, fa / 2, N, endpoint=True)
plt.plot(X, 2.0 * np.abs(Y[:N]) / N)
plt.xlabel('Frequency ($Hz$)')
plt.ylabel('vertical powergrid load ($MW$)')

但是我没有运行并且python给出了这个错误

/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/numpy/core/numeric.py:531:ComplexWarning:将复数转换为实数会丢弃虚部返回数组(a, dtype,复制=假,订单=订单) dt=0.00629s(采样时间) fa=159.00Hz(频率) /home/ozleb/PycharmProjects/work/venv/lib/python3.6/site-packages/dateutil/parser/_parser.py:1204:UnknownTimezoneWarning:tzname B 已识别但无法理解。传递 tzinfos 参数以正确返回时区感知日期时间。在未来的版本中,这将引发异常。 类别=未知时区警告) 17523 fa=0.0011Hz(频率) Tkinter 回调中的异常 回溯(最近一次通话最后): call__return self.func(*args) 中的文件“/usr/lib/python3.6/tkinter/init.py”,第 1702 行 文件“/usr/lib/python3.6/tkinter/__init.py”,第 746 行,在 callit func(*args) 中 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/backends/_backend_tk.py”,第 346 行,在 idle_draw self.draw() 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/backends/backend_tkagg.py”,第9行,在draw super(FigureCanvasTkAgg, self).draw() 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py”,第 402 行,绘制 self.figure.draw(self.renderer) 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/artist.py”,第 50 行,在 draw_wrapper 返回绘制(艺术家,渲染器,*args,**kwargs) 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/figure.py”,第 1652 行,绘制中 渲染器,自我,艺术家,self.suppressComposite) _draw_list_compositing_images a.draw(renderer) 中的文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/image.py”,第 138 行 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/artist.py”,第 50 行,在 draw_wrapper 返回绘图(艺术家,渲染器,*args,**kwargs) 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/axes/_base.py”,第 2604 行,绘制 mimage._draw_list_compositing_images(渲染器,自我,艺术家) _draw_list_compositing_images a.draw(renderer) 中的文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/image.py”,第 138 行 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/artist.py”,第 50 行,在 draw_wrapper 返回绘制(艺术家,渲染器,*args,**kwargs) 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/axis.py”,第 1185 行,绘制 ticks_to_draw = self._update_ticks(renderer) 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/axis.py”,第 1023 行,在 _update_ticks tick_tups = list(self.iter_ticks()) # iter_ticks 调用定位器 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/axis.py”,第 967 行,在 iter_ticks majorLocs = self.major.locator() 调用 self.refresh() 中的文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/dates.py”,第 1229 行 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/dates.py”,第 1249 行,刷新 dmin,dmax = self.viewlim_to_dt() 文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/dates.py”,第 1000 行,在 viewlim_to_dt.format(vmin)) ValueError: view limit minimum -36761.69947916667 小于 1 并且是无效的 Matplotlib 日期值。如果您将非日期时间值传递给具有日期时间单位的轴,这通常会发生

进程以退出代码 0 结束

这会导致python(3)版本吗? 我是新手,我想用 fft 处理来自传感器的信号数据。

谢谢

【问题讨论】:

  • 请包含完整错误信息。它应该说明哪一行是问题。

标签: python numpy


【解决方案1】:

如果您使用 Python3,N = len(Y)/2+1 可以计算为非整数值。 之后,您将尝试使用Y[:N] 对列表进行切片,但例如N 可能等于2.5

见以下代码:

nums = [1, 2, 3, 4, 5, 6, 7]
N = len(nums) / 2 + 1
print("N =", N);
print(nums[:N])

您计算N 的方式将使其等于4.5,因为len(nums) / 23.5。 我会改为 from math import ceil 然后

N = ceil(len(nums) / 2);

这将使N 等于4

这当然取决于您要切片的具体内容。这里的要点是您必须确保 N 是整数而不是浮点值。

【讨论】:

  • 是的,我正在使用 python3。能详细点吗?
  • 我通过澄清扩展了我的答案。如果您提及错误发生在哪一行,也会很有帮助。
  • 谢谢你我应用了你的答案,但继续出错。我编辑我的问题。我可以更改我的版本,如果它会引起很多问题
  • 这些问题不是由 Python 语言中的问题引起的,切换到 2.7 不太可能解决这些问题。您修复了第一个错误,但现在,从您发布的消息来看,您通过绘图库的日期格式存在问题。
【解决方案2】:

这行有错误吗?

X = np.linspace(0, fa/2, N, endpoint=True)

如果是这样,那一定是因为 N 必须是整数。在你的情况下,N 可能是浮动的

让我们检查 umpy 参考;

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

num : int,可选

要生成的样本数。

默认值为 50。 必须是非负数。

[https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.linspace.html]

【讨论】:

  • line 160, in plt.plot(X, 2.0*np.abs(Y[:N])/N) TypeError: slice indices must be integers or None or have a 索引方法
猜你喜欢
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
相关资源
最近更新 更多