Я пытаюсь создать совместный график для данных временных рядов. Результатом должна быть центральная диаграмма рассеяния (даты по 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, используя субплоты, но в итоге пришел к тому же сообщению об ошибке, как только я попытался добавить гистограмму гистограммы как субплот к точечный график. У меня сложилось впечатление, что проблема заключается в объединении необработанных и агрегированных данных по оси времени. Как к этому можно подойти?