Как показать несколько временных рядов с использованием морского рожка - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь сгенерировать 4 графика из DataFrame с использованием Seaborn

Date        A       B       C       D
2019-04-05  330.665 161.975 168.69  0
2019-04-06  322.782 150.243 172.539 0
2019-04-07  322.782 150.243 172.539 0
2019-04-08  295.918 127.801 168.117 0
2019-04-09  282.674 126.894 155.78  0
2019-04-10  293.818 133.413 160.405 0

Я произвел приведение дат с использованием pd.to_DateTime и чисел с использованием pd.to_numeric. Вот df.info ():

<class 'pandas.core.frame.DataFrame'>
Int64Index: 6 entries, 460 to 465
Data columns (total 5 columns):
Date  6 non-null datetime64[ns]
A     6 non-null float64
B     6 non-null float64
C     6 non-null float64
D     6 non-null float64
dtypes: datetime64[ns](1), float64(4)
memory usage: 288.0 bytes

Я могу создать широкий столбец, просто вызвав .plot () для df.

Однако,

  1. Легенда о сюжете охватывает сам сюжет

  2. Вместо этого я хотел бы иметь 4 отдельных графика на 1 диаграмме и попытался использовать lmplot для достижения этого.

  3. Я бы хотел добавить метки к графику так:

    Сюжет с изображением

Я сначала растаял данные:

df=pd.melt(df,id_vars='Date', var_name='Var', value_name='Unit')

А потом попробовал lmplot

sns.lmplot(x = df['Date'], y='Unit', col='Var', data=df)

Однако я получаю трассировку:

TypeError: Invalid comparison between dtype=datetime64[ns] and str

Я также попытался установить df.set_index ['Date'] и повторно отобразить это значение, используя x = df.index, и это дало мне ту же ошибку.

Данные могут быть построены с использованием Google Sheets, но я пытаюсь автоматизировать рабочий процесс, в котором диаграмма может быть сгенерирована и отправлена ​​через Slack выбранным получателям.

Надеюсь, я достаточно ясно выразил свое мнение, поскольку я довольно новичок в Python и Seaborn и надеюсь получить помощь от экспертов здесь.

1 Ответ

1 голос
/ 11 апреля 2019

Что касается легенды, вы можете просто использовать .legend(loc="upper left", bbox_to_anchor=(1,1)), как в этом примере

%matplotlib inline
import pandas as pd
import numpy as np


data = np.random.rand(10,4)
df = pd.DataFrame(data, columns=["A", "B", "C", "D"])
df.plot()\
  .legend(loc="upper left", bbox_to_anchor=(1,1));

В то время как для второго IIUC вы можете играть с

df.plot(subplots=True, layout=(2,2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...