Home > Mobile >  Seaborn / Matplotlib: Subplots depending on one column
Seaborn / Matplotlib: Subplots depending on one column

Time:01-01

I have a Dataframe and based on its data, I draw lineplots for it. The code currently looks as simple as that:

ax = sns.lineplot(x='datapoints', y='mean', hue='index', data=df)
sns.move_legend(ax, "upper left", bbox_to_anchor=(1, 1))

Now, there actually is a column, called "klinger", which has 8 different values and I would like to get a plot consisting of eight subplots (4x2) for it, all sharing just one legend.

Is that an easy thing to do?

Currently, I generate sub-dfs by filtering and just draw eight diagrams and cut them together with a graphic tool, but this can't be the solution

CodePudding user response:

You can get what you are looking for with sns.relplot and kind='line'. Use col='klinger' to plot subplots as many as you need, col_wrap=4 will help to obtain 4x2 shape, and col_order=klinger_categories will select which categories you want to plot.

import numpy as np
import pandas as pd
import seaborn as sns
number = 100
klinger_categories = ['a','b','c','d','e','f','g','h']
data = {'datapoints': np.arange(number),
        'mean': np.random.normal(0,1,size=number),
        'index': np.random.choice(np.arange(2),size=number),
        'klinger': np.random.choice(klinger_categories,size=number),
        }
df = pd.DataFrame(data)
sns.relplot(
        data=df, x='datapoints', y='mean', hue='index', kind='line',
        col='klinger', col_wrap=4, col_order=klinger_categories
        )

Output

  • Related