I'am trying to create two plots - one under another with seaborn!
My code:
fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True, figsize=(22,8))
p1 = sns.relplot(x="sns_codes", y="triad_quantity", hue="label", data=data_2, kind="line", ax=ax1)
p2 = sns.relplot(x="sns_codes", y="triad_quantity", hue="label", data=data_2, kind="line", ax=ax2)
But this creates 4 axes instead of 2! Look:
I give up getting read of these extra 2 axeses - need help.
Here's code to create data:
df ={'label': {0: 'top_5',
1: 'first_page',
2: 'win_ratecard',
4: 'switched_off',
5: 'top_5',
6: 'first_page',
7: 'win_ratecard',
9: 'switched_off',
10: 'top_5',
11: 'first_page'},
'report_date': {0: Timestamp('2018-08-21 00:00:00'),
1: Timestamp('2018-08-21 00:00:00'),
2: Timestamp('2018-08-21 00:00:00'),
4: Timestamp('2018-08-22 00:00:00'),
5: Timestamp('2018-08-22 00:00:00'),
6: Timestamp('2018-08-22 00:00:00'),
7: Timestamp('2018-08-22 00:00:00'),
9: Timestamp('2018-08-23 00:00:00'),
10: Timestamp('2018-08-23 00:00:00'),
11: Timestamp('2018-08-23 00:00:00')},
'sns_codes': {0: 0, 1: 0, 2: 0, 4: 1, 5: 1, 6: 1, 7: 1, 9: 2, 10: 2, 11: 2},
'triad_quantity': {0: 9,
1: 204,
2: 214,
4: 20,
5: 5,
6: 191,
7: 230,
9: 21,
10: 2,
11: 98}}
data_2 = pd.DataFrame(df)
Below is a possible solution to get rid of the additional unwanted empty plots. The problem was that when you call
sns.relplot
,relplot
returns aclass:FacetGrid object
. This can be seen here. But since you passax1
andax2
for plotting, these FacetGrids which are assigned the variablesp1
andp2
appear as blank plots. To get rid of these just add the following linesrelplot is a figure-level function, so it will create a figure. If you want to put your lineplots in existing matplotlib axes, without creating the extraneous figures, use seaborn's lineplot function, which is an axes-level function:
The two plots you've given as an example seem to do the same thing, but if you're trying to do multiple plots that vary along some dimension represented as a column in your dataframe, you can don't have to specify the subplots yourself. You can use seaborn to do this using sns.replot, with a row (facet) parameter specifying
row="a_column_on_which_your_plots_vary"
. See the seaborn tutorial for an illustration.