Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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 绘制日期时间数据帧会导致错误视图限制最小值-36495.50013946759小于1_Python_Pandas_Matplotlib - Fatal编程技术网

Python 绘制日期时间数据帧会导致错误视图限制最小值-36495.50013946759小于1

Python 绘制日期时间数据帧会导致错误视图限制最小值-36495.50013946759小于1,python,pandas,matplotlib,Python,Pandas,Matplotlib,我想使用matplotlib绘制数据帧 为什么在绘制数据帧时会出现错误 ds列应仅包含日期时间值。这至少是我所期望的 import pandas as pd import numpy as np import datetime import matplotlib.pyplot as plt np.random.seed(42) start = pd.datetime(2000, 1, 1, 0, 0, 1) ds = start value = 10.0 df = pd.DataFrame(co

我想使用matplotlib绘制数据帧

为什么在绘制数据帧时会出现错误

ds列应仅包含日期时间值。这至少是我所期望的

import pandas as pd
import numpy as np
import datetime
import matplotlib.pyplot as plt
np.random.seed(42)
start = pd.datetime(2000, 1, 1, 0, 0, 1)
ds = start
value = 10.0
df = pd.DataFrame(columns=["ds", "y"])

for runner in range(5):
    df.loc[len(df)] = [ds, value]
    value = value * (1 + np.random.normal(0, 0.01)) + 1
    ds = ds + datetime.timedelta(minutes=1)
df.head()
                   ds          y
0 2000-01-01 00:00:01  10.000000
1 2000-01-01 00:01:01  11.049671
2 2000-01-01 00:02:01  12.034394
3 2000-01-01 00:03:01  13.112339
4 2000-01-01 00:04:01  14.312044
plt.plot(df, "-o", markersize=2)
plt.show()
stacktrace的结尾显示:

  `File "/home/user/anaconda3/lib/python3.6/site-packages/matplotlib/dates.py", line 1026, in viewlim_to_dt
    .format(vmin))
ValueError: view limit minimum -36495.50013946759 is less than 1 and is an invalid Matplotlib date value. This often happens if you pass a non-datetime value to an axis that has datetime units`

如果您提供了一个参数,即多列数据帧,那么还不清楚应该绘制什么。所以它解释为将每一列作为数据帧索引的函数来绘制。第一列是datetime,第二列是float。我认为试图以同样的比例绘制它们是没有意义的。相反,您可能希望使用第一列作为x轴,第二列作为y轴值

您可以通过将第一列作为索引(然后有效地绘制单个列)来实现这一点

或者,您可以将每列提供给
plot
的前两个参数

plt.plot(df.ds, df.y, "-o", markersize=2)
也可以直接使用熊猫进行打印,从而使x轴格式略有不同

df.set_index("ds").plot(marker="o", markersize=2)
df.set_index("ds").plot(marker="o", markersize=2)