The following code will create an extra graph in a jupyter notebook:
Python: 2.7
Jupyter: 1.0.0
Matplotlib: 1.4.3
Seaborn: 0.9.0
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
cats = np.random.random_integers(1, 10, 10)
numbers = np.random.sample(size = 10)
data = pd.DataFrame({'x': cats, 'y': numbers})
a4_dims = (11.7, 8.27)
fig, ax = plt.subplots(1, 1, figsize = a4_dims)
sns.catplot(y = "x", x="y", ax = ax, data = data)

That's because catplot is a figure-level function: http://seaborn.pydata.org/introduction.html#figure-level-and-axes-level-functions
What's happening is that ax is getting passed down to sns.stripplot which can use it, but that's basically by accident. If you want to try a strip plot on an existing axes, you should use sns.stripplot.
plt.close(2) helps to hide the 2nd empty graph
Most helpful comment
plt.close(2) helps to hide the 2nd empty graph