Диаграмма рассеяния matplotlib / seaborn с объектом datetime на оси x и днями с несколькими записями - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть фрейм данных, и я хотел бы сделать точечный график того, сколько времени потребовалось для выполнения запроса days по оси Y и дня подачи запроса (Received, что являетсяобъект datetime) на оси X.

У некоторых значений 'Получено' есть две записи, потому что иногда два запроса были поданы в один и тот же день.

Вот некоторые из моих данных и код, который я пробовал:

Received          Days
2012-08-01        41.0 
2014-12-31       692.0
2015-02-25       621.0
2015-10-15       111.0

sns.regplot(x=simple_denied["Received"], y=simple_denied["days"], marker="+", fit_reg=False)


plt.plot('Received','days', simple_denied, color='black')

Ответы [ 2 ]

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

Вы попали в два случая, которые не работают.sns.regplot не будет работать с датами.И plt.plot нужно будет указать данные (он не может знать, какие данные использовать только по названию столбцов).

Таким образом, любое из следующего предоставит вам точечный график данных

  • sns.scatterplot(x="Received", y="days", data=simple_denied, marker="+")
  • sns.scatterplot(x=simple_denied["Received"], y=simple_denied["days"], marker="+")

  • plt.scatter(simple_denied["Received"].values, simple_denied["days"].values, marker="+")

  • plt.plot(simple_denied["Received"].values, simple_denied["days"].values, marker="+", ls="")

  • plt.plot("Received", "days", data=simple_denied, marker="+", ls="")

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

Давайте начнем с настройки ваших данных.На самом деле я добавил еще одну дату «2014-12-31» в ваш пример набора данных, чтобы мы могли проверить, работает ли наша подпрограмма построения графиков при получении нескольких запросов в один и тот же день:

import matplotlib.pyplot as plt
plt.style.use('seaborn')
import pandas as pd
import numpy as np

dates = np.array(['2012-08-01', '2014-12-31',
                  '2014-12-31', '2015-02-25',
                  '2015-10-15'], dtype='datetime64')

days = np.array([41, 692, 50, 621, 111])

df = pd.DataFrame({'Received' : dates, 'Days' : days})

Созданный кадр данныхнадо надеяться приблизиться к тому что у вас есть.Создание желаемого точечного графика теперь просто:

fig, ax = plt.subplots(1, 1)

ax.scatter(df['Received'], df['Days'], marker='+')
ax.set_xlabel("Receieved")
ax.set_ylabel("Days")

Это дало мне следующий график:

enter image description here Как отмечено @ImportanceOfBeingErnest в комментарияхниже вам нужна последняя версия панд, чтобы эта процедура работала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...