如何使用 seaborn 或 plotly 绘制时间序列图?

新手上路,请多包涵

我有一个时间序列数据如下:

 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()

这给了我

图形

但我想使用 seabornplotly 绘制相同的图

对于 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)

所以,我有两个问题:

  1. 在上图中,我们可以看到 x 轴有索引,但我希望它是 Datum 那里的值。怎么改?
  2. 我想在 seaborn 或 plotly 中实现这一点,那么有没有办法在其中实现这一切?

原文由 some_programmer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 697
2 个回答

考虑一个玩具数据框:

  • seaborn 解决方案
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()

在此处输入图像描述

  • 情节解决方案
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)

在此处输入图像描述

原文由 sentence 发布,翻译遵循 CC BY-SA 4.0 许可协议

最干净的设置,即使对于多个时间序列,也是:

  • 剧情: px.line()

  • seaborn: lineplot()


阴谋地:

 px.line(df, x = df.index, y = df.columns)

在此处输入图像描述


海伯恩:

 sns.lineplot(data = df)

在此处输入图像描述


seaborn 和 plotly 的完整代码:

以下代码示例将让您生成这两个图。

 import plotly.graph_objs as go
from datetime import datetime
import plotly.express as px
import matplotlib as mpl
import seaborn as sns
import pandas as pd
import numpy as np

# sample data in a pandas dataframe

np.random.seed(23)
observations = 75
df=pd.DataFrame(dict(A=np.random.uniform(low=-1, high=1.1, size=observations).tolist(),
                    B=np.random.uniform(low=-1, high=1.1, size=observations).tolist(),
                    C=np.random.uniform(low=-1, high=1.1, size=observations).tolist(),
                    ))
df.iloc[0,] = 0
df = df.cumsum()

firstdate = datetime(2020,1,1)
df['date'] = pd.date_range(firstdate, periods=df.shape[0]).tolist()
df.set_index('date', inplace=True)

px.line(df, x = df.index, y = df.columns)

# fig = go.Figure([{
#     'x': df.index,
#     'y': df[col],
#     'name': col
# }  for col in df.columns])
# fig.show()

#  sns.set_style("darkgrid")
#sns.lineplot(data = df)

情节表达

px.line(df, x = df.index, y = df.columns)

另一个阴谋的选择是:

密谋graph_objects

 fig = go.Figure([{
    'x': df.index,
    'y': df[col],
    'name': col
}  for col in df.columns])
fig.show()

海生

sns.set_style("darkgrid")
sns.lineplot(data = df)

原文由 vestland 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题