python - 绘制日期时间数据框会导致错误视图限制最小值 -36495.50013946759 小于 1
问题描述
我想使用 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`
解决方案
plot
如果您提供一个参数,它是一个多列数据框,则还不清楚应该绘制什么。因此它将其解释为将每一列绘制为数据帧索引的函数。您的第一列是日期时间,您的第二列是浮点数。我认为尝试以相同的比例绘制它们是没有意义的。相反,您可能希望将第一列用作 x 轴,将第二列用作 y 轴值。
您可以通过使第一列成为索引来做到这一点(然后有效地绘制一列)
plt.plot(df.set_index("ds"), "-o", markersize=2)
或者您可以将每一列提供给 的前两个参数plot
,
plt.plot(df.ds, df.y, "-o", markersize=2)
您也可以直接使用 pandas 进行绘图,从而导致 x 轴格式略有不同
df.set_index("ds").plot(marker="o", markersize=2)
推荐阅读
- c++ - 托盘图标应用程序将从服务中关闭
- android - OnCreateOptionMenu 不适用于 Theme.Material.Light.Dialog 主题
- r - 获取列表中函数的名称
- javascript - 无法在纸张列表框上触发铁选择事件
- c# - 将文件上传到 WebApi 并保存,在 IE 中有效,但在 Chrome 中无效
- git - git commit 不适用于 Git Bash
- javascript - 如何从 Firebase 获取 PWA 数据
- angular - 如何在运行时更改 Angular Material Datepicker 格式
- python - python tkinter Radiobuttons - 在显示之前选择两个按钮
- c# - 带有可选参数的 C# 编写的 VBA 函数(COM 插件)