在Python中用多色线绘制时间序列

cwo*_*art 3 python plot seaborn

这是我的数据集:

import pandas as pd
from datetime import datetime
import numpy as np

date_rng = pd.date_range(start='2020-07-01', end='2020-07-20', freq='d')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng))).cumsum()
df['Signal'] = [0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1] 
Run Code Online (Sandbox Code Playgroud)

我想根据“信号”列对线路进行着色,例如,如果信号= 0,则将线路着色为蓝色,如果信号= 1,则将线路着色为橙色。

我使用seaborn尝试了以下操作,这不是我想要的。我想要一根线有两种颜色。

sns.lineplot(data=df, x="date", y="data", hue="Signal")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

任何帮助将非常感激!

小智 5

import pandas as pd
from datetime import datetime
import numpy as np

date_rng = pd.date_range(start='2020-07-01', end='2020-07-20', freq='d')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0,100,size=(len(date_rng))).cumsum()
df['Signal'] = [0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1]

sig_0 = np.ma.masked_where(df['Signal'] ==0, df['data'])
sig_1 = np.ma.masked_where(df['Signal'] ==1, df['data'])
plt.plot(df['date'], sig_0, df['date'], sig_1)
Run Code Online (Sandbox Code Playgroud)

这将为您提供以下情节。 在此输入图像描述

间隙对应于信号值从 0 移动到 1 或 1 到 0 的点。您可以通过放置额外的绘图命令用其他颜色填充这些间隙

plt.plot(df['date'], df['data'], color='grey')
plt.plot(df['date'], sig_0, df['date'], sig_1)
Run Code Online (Sandbox Code Playgroud)

结果图 在此输入图像描述