Skip to content Skip to sidebar Skip to footer

How To Rotate Seaborn Barplot X-axis Tick Labels

I'm trying to get a barplot to rotate it's X Labels in 45° to make them readable (as is, there's overlap). len(genero) is 7, and len(filmes_por_genero) is 20 I'm using a MovieLens

Solution 1:

import pandas as pd
import mathplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid")

# data
df = pd.read_csv('ml-25m/movies.csv')

print(df.head())

   movieId                               title                                       genres
01                    Toy Story (1995)  Adventure|Animation|Children|Comedy|Fantasy
12                      Jumanji (1995)                   Adventure|Children|Fantasy
23             Grumpier Old Men (1995)                               Comedy|Romance
34            Waiting to Exhale (1995)                         Comedy|Drama|Romance
45  Father of the Bride Part II (1995)                                       Comedy

# clean genres
df['genres'] = df['genres'].str.split('|')
df = df.explode('genres').reset_index(drop=True)

print(df.head())

   movieId             title     genres
01  Toy Story (1995)  Adventure
11  Toy Story (1995)  Animation
21  Toy Story (1995)   Children
31  Toy Story (1995)     Comedy
41  Toy Story (1995)    Fantasy

Genres Counts

gc = df.genres.value_counts().to_frame()

print(genre_count)

                    genres
Drama                25606
Comedy               16870
Thriller              8654
Romance               7719
Action                7348
Horror                5989
Documentary           5605
Crime                 5319
(no genres listed)    5062
Adventure             4145
Sci-Fi                3595
Children              2935
Animation             2929
Mystery               2925
Fantasy               2731
War                   1874
Western               1399
Musical               1054
Film-Noir              353
IMAX                   195

Plot: sns.barplot

With ax

fig, ax = plt.subplots(figsize=(12, 6))
sns.barplot(x=gc.index, y=gc.genres, palette=sns.color_palette("BuGn_r", n_colors=len(genre_count) + 4), ax=ax)
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right')
plt.show()

Without ax

plt.figure(figsize=(12, 6))
chart = sns.barplot(x=gc.index, y=gc.genres, palette=sns.color_palette("BuGn_r", n_colors=len(genre_count)))
chart.set_xticklabels(chart.get_xticklabels(), rotation=45, horizontalalignment='right')
plt.show()

enter image description here

Plot: sns.countplot

  • Use sns.countplot to skip using .value_counts() if the plot order doesn't matter.
  • To order the countplot, order=df.genres.value_counts().index must be used, so countplot doesn't really save you from needing .value_counts(), if a descending order is desired.
fig, ax = plt.subplots(figsize=(12, 6))
sns.countplot(data=df, x='genres', ax=ax)
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right')
plt.show()

enter image description here

Post a Comment for "How To Rotate Seaborn Barplot X-axis Tick Labels"