Reputation: 2871
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
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