Skip to content Skip to sidebar Skip to footer

How To Plot A Multiple Line Plot In Seaborn Using Specific Columns?

I have a bigger dataframe that resembles this format: df = pd.DataFrame([{'name': 'A', '2015': 99, '2016':98, '2017': '95', '2018':'99'}, {'name': 'B', '2015': 76, '2016':89, '2017

Solution 1:

Here I assume that the years are strings and the values are integers.

Seaborn expects data in tidy format, so first you might transform your dataframe.

import seaborn as sns
import pandas as pd


df = pd.DataFrame(
    [
        {"name": "A", "2015": 99, "2016": 98, "2017": 95, "2018": 99},
        {"name": "B", "2015": 76, "2016": 89, "2017": 83, "2018": 85},
        {"name": "C", "2015": 88, "2016": 89, "2017": 91, "2018": 91},
    ]
)

df.set_index("name", inplace=True)
tidy = df.stack().reset_index().rename(columns={"level_1": "year", 0: "values"})

Here is the outcome

    name    year    values
0   A   2015991   A   2016982   A   2017953   A   2018994   B   2015765   B   2016896   B   2017837   B   2018858   C   2015889   C   20168910  C   20179111  C   201891

Then, you can

  1. filter it for the years you want
  2. pass it as a data parameter
  3. specify the columns at x, y, and hue
sns.lineplot(
    data=tidy[tidy["year"].isin(["2016", "2018"])], x="year", y="values", hue="name"
)

The result

enter image description here

Solution 2:

Assuming that you have numeric data on the columns and in the values, you can simply melt you dataframe and call a lineplot.

sns.lineplot(data=df.melt(id_vars=['name']), 
             x='variable', y='value', hue='name')

enter image description here

Post a Comment for "How To Plot A Multiple Line Plot In Seaborn Using Specific Columns?"