python - ValueError : view limit minimum -36761. 69947916667 小于 1 并且是无效的 Matplotlib 日期值。

标签 python numpy

我使用这个代码部分;

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: Casting complex values to real 丢弃虚部返回数组(a, dtype, copy =假,订单=订单)
dt=0.00629s(采样时间)
fa=159.00Hz(频率)
/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/dateutil/parser/_parser.py:1204: UnknownTimezoneWarning: tzname B 已识别但无法理解。通行证tzinfos参数以便正确返回时区感知日期时间。在 future 的版本中,这将引发异常。
类别=未知时区警告)
17523
fa=0.0011Hz(频率)
Tkinter 回调中的异常
回溯(最近一次调用最后一次):
文件“/usr/lib/python3.6/tkinter/ init .py”,第1702行,在 call__return self.func(*args)
文件“/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 中返回 draw(artist, renderer, *args, **kwargs)
文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/figure.py”,第1652行,绘制
渲染器,自我,艺术家,self.suppressComposite)
文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/image.py”,第 138 行,在 _draw_list_compositing_images a.draw(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/axes/_base.py”,第2604行,在绘制mimage._draw_list_compositing_images(渲染器,自我,艺术家)
文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/image.py”,第 138 行,在 _draw_list_compositing_images a.draw(renderer)
文件“/home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/artist.py”,第 50 行,在 draw_wrapper 中返回 draw(artist, renderer, *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()
文件“/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 处理来自传感器的信号数据。

谢谢

最佳答案

如果您使用的是 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 是整数而不是浮点值。

关于python - ValueError : view limit minimum -36761. 69947916667 小于 1 并且是无效的 Matplotlib 日期值。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52868818/

相关文章:

jquery - 动态添加表单元素后表单提交

python - Django filter() 增加结果查询集而不是减少

python - 使用 wxPython 显示缩略图的简单方法

python - 有没有办法在Python中快速创建许多文件,许多连续文件(ex1 ... ex 50)?

python - 了解 Keras LSTM ( lstm_text_generation.py ) - RAM 内存问题

python - 如何将 python 数据结构链接到 matplotlib 中?例如字典 -> 条形图

python - 我可以将事件与 Firebase 的 REST api 一起使用吗?

python - 如何对PIL图像的所有像素求和?

python - numpy/pandas 数组/数据帧的有效乘法

python - python中的有界圆插值