Как построить график временных рядов с использованием морских или сюжетно? - PullRequest
3 голосов
/ 15 мая 2019

У меня есть данные временного ряда следующим образом:

Datum   Menge
1/1/2018 0:00   19.5
1/1/2018 0:15   19.0
1/1/2018 0:30   19.5
1/1/2018 0:45   19.5
1/1/2018 1:00   21.0
1/1/2018 1:15   19.5
1/1/2018 1:30   20.0
1/1/2018 1:45   23.0

и кадр данных data имеет форму (14880, 2). В столбце Menge доступно только 11807 значений, а остальные nan

Я пытаюсь построить это следующим образом:

data.plot()
plt.show()

и это дает мне

Graph

Но я хочу построить то же самое, используя seaborn или plotly

для seaborn Я пробовал:

x = data.Datum
y = data.Menge.values
sns.lineplot(x = x, y = y, data = data)

и это дает мне вывод:

Out[3]: <matplotlib.axes._subplots.AxesSubplot at 0x21286bb8668>

и открывается новое графическое окно, но оно говорит Figure 1 (Not Responding)

Итак, у меня есть 2 вопроса:

  1. На приведенном выше графике мы можем видеть, что ось x имеет индекс, но я бы хотел, чтобы там были значения Datum. Как это можно изменить?
  2. Я бы хотел добиться этого в морском или заговоре, так есть ли способ добиться всего этого в любом из них?

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Учитывая игрушечный фрейм данных:

  • морской раствор
import pandas as pd
import matplotlib.pyplot as plt

import seaborn as sns

df = pd.DataFrame({"Datum": ['1/1/2018 0:00',
                             '1/1/2018 0:15',
                             '1/1/2018 0:30',
                             '1/1/2018 0:45',
                             '1/1/2018 1:00',
                             '1/1/2018 1:15',
                             '1/1/2018 1:30',
                             '1/1/2018 1:45 '],
                   "Menge": [19.5, 19.,19.5,19.5,21,19.5,20,23]})
sns.lineplot(x="Datum", y="Menge", data=df)
plt.xticks(rotation=15)
plt.title('seaborn-matplotlib example')
plt.show()

enter image description here

  • сюжетное решение
import pandas as pd
import numpy as np

import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
init_notebook_mode(connected=True)

trace1 = go.Scatter(x=df.Datum,
                    y=df.Menge,
                    name = "plotly example",
                    line = dict(color = 'blue'),
                    opacity = 0.4)

layout = dict(title='plotly example',)

fig = dict(data=[trace1], layout=layout)
iplot(fig)

enter image description here

1 голос
/ 16 мая 2019

Самые чистые настройки, даже для нескольких временных рядов:

  • Участок: iplot()

  • морское происхождение: lineplot()


plotly:

iplot([{
    'x': df.index,
    'y': df[col],
    'name': col
}  for col in df.columns])

enter image description here


Seaborn:

sns.lineplot(data = df)

enter image description here


Полный код как для морского, так и для участка:

Следующий пример кода позволит вам создать оба графика в автономном ноутбуке Jupyter.

# imports
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
from IPython.core.display import display, HTML
import matplotlib as mpl
import cufflinks as cf
import seaborn as sns
import pandas as pd
import numpy as np

# setup
display(HTML("<style>.container { width:35% !important; } .widget-select > select {background-color: gainsboro;}</style>"))
init_notebook_mode(connected=True)
np.random.seed(1)
mpl.rcParams['figure.dpi']= 440

# sample data from cufflinks
df = cf.datagen.lines()

# plotly
iplot([{
    'x': df.index,
    'y': df[col],
    'name': col
}  for col in df.columns])


# seaborn
sns.set_style("darkgrid")
plt.xticks(rotation=45)
sns.lineplot(data = df)
...