Multi-line chart with seaborn tsplot

前端 未结 2 1410
故里飘歌
故里飘歌 2020-12-11 22:25

I want to create a smoothed line chart using matplotlib and seaborn.

This is my dataframe df:

hour    direction    hourly_avg_count
0            


        
相关标签:
2条回答
  • 2020-12-11 22:51

    Try adding a dummy unit column. The first parts is to create some synthetic data, so please ignore.

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

    0 讨论(0)
  • 2020-12-11 23:14

    The tsplot is a bit strange or at least strangly documented. If a dataframe is supplied to it, it assumes that there must be a unit and a time column present, as it internally pivots about those two. To use tsplot to plot several time series you would therefore need to supply an argument to unit as well; this can be the same as condition.

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

    Complete example:

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

    Also worth noting that tsplot is deprecated as of seaborn version 0.8. It might thus be worth to use some other way to plot the data anyways.

    0 讨论(0)
提交回复
热议问题