Danish
Danish

Reputation: 2871

subplots in python with multiple line charts using pandas ans seaborn

I have a data frame as shown below

product    bought_date     Monthly_profit     Average_discout
A          2016            85000000           5
A          2017            55000000           5.6
A          2018            45000000           10
A          2019            35000000           9.8
B          2016            75000000           5
B          2017            55000000           4.6
B          2018            75000000           11
B          2019            45000000           9.8
C          2016            95000000           5.3
C          2017            55000000           5.1
C          2018            50000000           10.2
C          2019            45000000           9.8

From the above I would like to plot 3 subplots.

one for product A, B and C.

In each subplot there should be 3 line plot, where

X axis = bought_date
Y axis1 = Monthly_profit
Y axis2 = Average_discout

I tried below code.

sns.set(style = 'darkgrid')
sns.lineplot(x = 'bought_date', y  = 'Monthly_profit', style = 'product', 
             data = df1, markers = True, ci = 68, err_style='bars')

Upvotes: 0

Views: 452

Answers (1)

Stef
Stef

Reputation: 30579

Variant 1: using subplots and separating the data manually

products = df['product'].unique()
fig,ax = plt.subplots(1,len(products),figsize=(20,10))
for i,p in enumerate(products):
    sns.lineplot('bought_date', 'Monthly_profit', data=df[df['product']==p], ax=ax[i])
    sns.lineplot('bought_date', 'Average_discout', data=df[df['product']==p], ax=ax[i].twinx(), color='orange')
    ax[i].legend([f'Product {p}'])

Variant 2: using FacetGrid:

def lineplot2(x, y, y2, **kwargs):
    ax = sns.lineplot(x, y, **kwargs)
    ax2 = ax.twinx()
    sns.lineplot(x, y2, ax=ax2, **kwargs)

g = sns.FacetGrid(df, col='product')
g.map(lineplot2, 'bought_date', 'Monthly_profit', 'Average_discout', marker='o')

These are just general rough examples, you'll have to tidy up axis labels etc. as needed.

Upvotes: 1

Related Questions