Как создать точечный график с метками времени

1

Как создать график рассеяния с использованием timestamps?

Ниже приведен пример, но я получаю ошибку ValueError: First argument must be a sequence

import pandas as pd
import matplotlib.pyplot as plt

d = ({
    'A' : ['08:00:00','08:10:00'],
    'B' : ['1','2'],           
    })

df = pd.DataFrame(data=d)

fig = plt.figure()

x = df['A']
y = df['B']

plt.scatter(x,y)

Если я преобразую временные метки в полные секунды, это работает:

df['A'] = pd.to_timedelta(df['A'], errors="coerce").dt.total_seconds()

Но я бы хотел, чтобы 24-часовой график находился на оси х, а не на полных секундах.

Теги:
pandas
matplotlib
scatter

1 ответ

1
Лучший ответ

Используйте x-ticks:

d = ({
'A' : ['08:00:00','08:10:00'],
'B' : [1,2],
})

df = pd.DataFrame(data=d)

fig = plt.figure()

x = df['A']
y = df['B']

x_numbers = list(pd.to_timedelta(df['A'], errors="coerce").dt.total_seconds ())
plt.scatter(x_numbers, y)
plt.xticks(x_numbers, x)
plt.show()

Это будет отображать метки времени в качестве меток на оси x.

Нотетом, что я преобразовал столбец "B" в ваш dataframe в числа вместо строк. Если они действительно должны быть строками или импортированы как строки из файла, просто преобразуйте их в числа, например, через функцию eval.

  • 0
    Спасибо @Tim Сков Якобсен. Работает без конвертации в списки
  • 0
    @ Punter345. Ты прав. При построении, это не обязательно. Я удалил это из ответа.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню