首页 文章

ValueError:视图限制最小值-36761.69947916667小于1并且是无效的Matplotlib日期值 .

提问于
浏览
1

我用这个代码部分;

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,copy = False,order = order)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 参数以正确返回时区感知日期时间 . 在将来的版本中,这将引发异常 . category = UnknownTimezoneWarning)17523 fa = 0.0011Hz(频率)Tkinter回调中的异常回溯(最近一次调用最后一次):文件“/usr/lib/python3.6/tkinter/ init .py”,第1702行, *call__return self.func(args) File "/usr/lib/python3.6/tkinter/__init .py ", line 746, in callit func(*args) File " /home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/backends/_backend_tk.py ", line 346, in idle_draw self.draw() File " /home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/ matplotlib / backends / backend_tkagg.py ", line 9, in draw super(FigureCanvasTkAgg, self).draw() File " /home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py ", line 402, in draw self.figure.draw(self.renderer) File " / home / ozlemb / PycharmProjects / work / venv / lib / python3.6 / site-packages / matplotlib / artist.py ", line 50, in draw_wrapper return draw(artist, renderer, *args, **kwargs) File " /home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/figure.py ", line 1652, in draw renderer, self, artists, self.suppressComposite) File " / home / ozlemb / PycharmProjects / work / venv / lib / python3.6 / site-packages / matplotlib / image.py ", line 138, in _draw_list_compositing_images a.draw(renderer) File " /home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/artist.py ", line 50, in draw_wrapper return draw(artist, renderer, *args, **kwargs) File " / home / ozlemb / PycharmProjects /工作/ VENV / lib中/ python3.6 /站点packag es / matplotlib / axes / _base.py ", line 2604, in draw mimage._draw_list_compositing_images(renderer, self, artists) File " /home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/image.py ", line 138, in _draw_list_compositing_images a.draw(renderer) File " / home / ozlemb / PycharmProjects / work / venv / lib / python3.6 / site-packages / matplotlib / artist.py ", line 50, in draw_wrapper return draw(artist, renderer, *args, **kwargs) File " /home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/axis.py ", line 1185, in draw ticks_to_draw = self._update_ticks(renderer) File " / home / ozlemb / PycharmProjects / work / venv / lib / python3.6 / site-packages / matplotlib / axis.py ", line 1023, in _update_ticks tick_tups = list(self.iter_ticks()) # iter_ticks calls the locator File " /home/ozlemb/PycharmProjects/work/venv/lib/python3.6/site-packages/matplotlib/axis.py ", line 967, in iter_ticks majorLocs = self.major.locator() File " / home / ozlemb / PycharmProjects / work / venv / lib / python3.6 / site-packages / matplotlib / dates.py“,第1229行, call self.refresh()文件"/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:视图限制最小值-36761.69947916667小于1并且是无效的Matplotlib日期值 . 如果将非日期时间值传递给具有日期时间单位的轴,则通常会发生这种情况

进程以退出代码0结束

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

谢谢

2 回答

  • 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是一个整数而不是一个浮点值 .

  • 0

    这条线会出错吗?

    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]

相关问题