Создание совместного сюжета для временных рядов с Seaborn или Matplotlib - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь создать совместный график для данных временных рядов. Результатом должна быть центральная диаграмма рассеяния (даты по x и значения по оси y) с двумя смежными гистограммами, что очень похоже на первый пример в документации по совместным графикам Seaborn . Гистограмма для оси x должна оптимально представлять годовые корзины.

Вот некоторый фиктивный код, который напоминает данные, к которым я пытаюсь применить это (исходный набор данных составляет несколько ГБ):

import numpy as np
import pandas as pd
import seaborn as sns

def random_date(start, end, position=None):
    start, end = pd.Timestamp(start), pd.Timestamp(end)
    delta = (end - start).total_seconds()
    if position is None:
        offset = np.random.uniform(0., delta)
    else:
        offset = position * delta
    offset = pd.offsets.Second(int(offset))
    t = start + offset
    return t

n = 1000
values = (np.random.normal(loc=0, scale=1, size=n) + 3) * 1000
dates = [random_date('1980-01-01', '2019-12-31') for i in range(n)]
# The following would work
# dates = np.linspace(0, n-1, n)
dates.sort()
timeseries = pd.Series(values, dates)

g = sns.jointplot(x=timeseries.index, y=timeseries.values)

(Функция для случайных дат из этого ответа от metakermit )

Скрипт работает, когда значения x равны нумерации c, например, dates = np.linspace(0, n-1, n), но не работает со значениями даты и времени. Ошибки выглядят следующим образом:

ValueError: view limit minimum -7.887272569924102e+16 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

Я пытался создать совместный график с нуля в Matplotlib, используя субплоты, но в итоге пришел к тому же сообщению об ошибке, как только я попытался добавить гистограмму гистограммы как субплот к точечный график. У меня сложилось впечатление, что проблема заключается в объединении необработанных и агрегированных данных по оси времени. Как к этому можно подойти?

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