How do I create a multiline plot using seaborn?

后端 未结 3 1652
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-13 13:55

I am trying out Seaborn to make my plot visually better than matplotlib. I have a dataset which has a column \'Year\' which I want to plot on the X-axis and 4 Columns say A,

相关标签:
3条回答
  • 2020-12-13 14:00

    Seaborn favors the "long format" as input. The key ingredient to convert your DataFrame from its "wide format" (one column per measurement type) into long format (one column for all measurement values, one column to indicate the type) is pandas.melt. Given a data_preproc structured like yours, filled with random values:

    num_rows = 20
    years = list(range(1990, 1990 + num_rows))
    data_preproc = pd.DataFrame({
        'Year': years, 
        'A': np.random.randn(num_rows).cumsum(),
        'B': np.random.randn(num_rows).cumsum(),
        'C': np.random.randn(num_rows).cumsum(),
        'D': np.random.randn(num_rows).cumsum()})
    

    A single plot with four lines, one per measurement type, is obtained with

    sns.lineplot(x='Year', y='value', hue='variable', 
                 data=pd.melt(data_preproc, ['Year']))
    

    (Note that 'value' and 'variable' are the default column names returned by melt, and can be adapted to your liking.)

    0 讨论(0)
  • 2020-12-13 14:07

    This:

    sns.lineplot(data=data_preproc)
    

    will do what you want.

    0 讨论(0)
  • 2020-12-13 14:22

    See the documentation:

    sns.lineplot(x="Year", y="signal", hue="label", data=data_preproc)
    

    You probably need to re-organize your dataframe in a suitable way so that there is one column for the x data, one for the y data, and one which holds the label for the data point.

    You can also just use matplotlib.pyplot. If you import seaborn, much of the improved design is also used for "regular" matplotlib plots. Seaborn is really "just" a collection of methods which conveniently feed data and plot parameters to matplotlib.

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