带有seaborn tsplot的多线图

时间:2017-07-26 13:00:13

标签: python matplotlib seaborn

我想使用matplotlib和seaborn创建一个平滑的折线图。

这是我的数据框df

hour    direction    hourly_avg_count
0       1            20
1       1            22
2       1            21
3       1            21
..      ...          ...
24      1            15
0       2            24
1       2            28
...     ...          ...

折线图应包含两行,一行direction等于1,另一行direction等于2. X轴为hour,Y轴为{{1} }。

我尝试了这个,但我看不到这些线条。

hourly_avg_count

2 个答案:

答案 0 :(得分:11)

tsplot有点奇怪或至少有严格记录。如果向其提供了数据框,则它假定必须存在unittime列,因为它在内部关于这两个列。要使用tsplot绘制几个时间序列,您需要为unit提供参数;这可以与condition相同。

sns.tsplot(df, time='hour', unit = "direction", 
               condition='direction', value='hourly_avg_count')

完整示例:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

hour, direction = np.meshgrid(np.arange(24), np.arange(1,3))
df = pd.DataFrame({"hour": hour.flatten(), "direction": direction.flatten()})
df["hourly_avg_count"] = np.random.randint(14,30, size=len(df))

plt.figure(figsize=(12,8))
sns.tsplot(df, time='hour', unit = "direction", 
               condition='direction', value='hourly_avg_count')

plt.show()

enter image description here

另外值得注意的是tsplot is deprecated至于seaborn版本0.8。因此,值得使用其他方式来绘制数据。

答案 1 :(得分:1)

尝试添加虚拟单位列。第一部分是创建一些合成数据,所以请忽略。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

df1 = pd.DataFrame({
"hour":range(24),
"direction":1,
"hourly_avg_count": np.random.randint(25,28,size=24)})

df2 = pd.DataFrame({
"hour":range(24),
"direction":2,
"hourly_avg_count": np.random.randint(25,28,size=24)})

df = pd.concat([df1,df2],axis=0)
df['unit'] = 'subject'

plt.figure()
sns.tsplot(data=df, time='hour', condition='direction',
unit='unit', value='hourly_avg_count')

enter image description here