如何使用Seaborn显示多个时间序列图

时间:2019-04-11 14:36:50

标签: pandas dataframe seaborn

我正在尝试使用Seaborn从DataFrame生成4个图

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

我可以通过在df上调用.plot()来进行宽列绘图。

但是

  1. 剧情的传说覆盖了剧情本身

  2. 我想在一张图中有4个单独的图,并尝试使用lmplot来实现。

  3. 我想像这样在图上添加标签:

    Plot with image

我首先融化了数据:

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表格来绘制数据,但是我正在尝试自动化工作流,在该工作流中可以生成图表并通过Slack发送给选定的收件人。

我希望我已经足够清楚地表达了自己,因为我对Python和Seaborn相当陌生,并希望从这里的专家那里获得一些帮助。

1 个答案:

答案 0 :(得分:1)

关于图例,您可以仅在本示例中使用.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));