Построение кадра данных даты и времени приводит к тому, что минимальный предел просмотра ошибок -36495.50013946759 меньше 1 - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу построить график данных с помощью 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`

1 Ответ

0 голосов
/ 11 февраля 2019

Не совсем понятно, что plot должен отображать график, если вы укажете один аргумент, который представляет собой многостолбцовый фрейм данных.Таким образом, он интерпретирует это как построение каждого столбца в зависимости от индекса данных.Ваш первый столбец - datetime, второй - float.Я не думаю, что имеет смысл пытаться представить их в одном масштабе.Вместо этого вы, вероятно, захотите использовать первый столбец в качестве оси 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...