- The correct way to set the xticklabels for
sns.catplot, according to the documentation, is with the .set_xticklabels method (.e.g. g.set_xticklabels(rotation=30)). - Using a loop to iterate through the
Axes, should be used if changes need to be made on a plot by plot basis, within the FacetGrid. - Building structured multi-plot grids
seaborn.FacetGrid g, or in the case of the OP, ax is a seaborn.axisgrid.FacetGrid - When iterating through
ax.axes.flat, axes is a <class 'matplotlib.axes._subplots.AxesSubplot'>, which has a wide array of class methods, including .get_xticklabels().
- In cases with many columns, and
col_wrap= is used, g.set_xticklabels(rotation=30) may result in removing all the xticklabels. - Instead,
labels= must be specified, g.set_xticklabels(g.axes.flat[-1].get_xticklabels(), rotation=30), where g.axes.flat[-1] should be the last facet axes with xticklabels. - Alternatively, use
g.tick_params(axis='x', rotation=30)
- Tested in
python 3.12, matplotlib 3.8.1, seaborn 0.13.0
One Row & Multiple Columns
import seaborn as sns # load data exercise = sns.load_dataset("exercise") # plot catplot g = sns.catplot(x="time", y="pulse", hue="kind", col="diet", data=exercise) # set rotation g.set_xticklabels(rotation=30)

Multiple Rows & Columns
# plot catplot g = sns.catplot(x="time", y="pulse", hue="diet", col="kind", col_wrap=2, data=exercise) # set rotation using one of the following options # g.set_xticklabels(labels=g.axes.flat[-1].get_xticklabels(), rotation=30) g.tick_params(axis='x', rotation=30)

- Using
g.set_xticklabels(g.get_xticklabels(), rotation=30) results in an AttributeError.
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-442-d1d39d8cc4f0> in <module> 1 g = sns.catplot(x="time", y="pulse", hue="kind", col="diet", data=exercise) ----> 2 g.set_xticklabels(g.get_xticklabels(), rotation=30) AttributeError: 'FacetGrid' object has no attribute 'get_xticklabels'