我想使用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()
堆栈跟踪的末尾显示:
`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`
答案 0 :(得分:1)
在提供单个参数(多列数据框)的情况下,plot
应该绘制的内容还不清楚。因此,它将其解释为根据数据帧索引绘制各列。第一列是日期时间,第二列是浮点数。我认为尝试按相同比例绘制它们没有意义。相反,您可能想将第一列用作x轴,将第二列用作y轴值。
您可以通过将第一列作为索引来实现(然后有效地绘制单个列)
plt.plot(df.set_index("ds"), "-o", markersize=2)
或者您可以为plot
的前两个参数提供每列
plt.plot(df.ds, df.y, "-o", markersize=2)
您也可以直接使用熊猫进行绘图,从而导致x轴格式略有不同
df.set_index("ds").plot(marker="o", markersize=2)