Я пытаюсь повернуть метки на 45 ° в seaborn, но получаю ValueError: «Группировщик и ось должны быть одинаковой длины» - PullRequest
1 голос
/ 22 апреля 2020

Я довольно новичок в Python (я пытаюсь изучать Data Sciente самостоятельно, но я на самом деле юрист по образованию), и я пытаюсь получить барплот, чтобы повернуть его X Labels в 45 °, чтобы сделать их читаемыми (как есть, есть наложение). Я использую набор данных MovieLens и создаю график, подсчитывающий количество фильмов в каждом отдельном жанре. Вот мой код на данный момент:

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style("whitegrid")

filmes_por_genero = filmes["generos"].str.get_dummies('|').sum().sort_values(ascending=False)
genero = filmes_com_media.index

chart = plt.figure(figsize=(16,8))
sns.barplot(x=genero,
            y=filmes_por_genero.values,
            palette=sns.color_palette("BuGn_r", n_colors=len(filmes_por_genero) + 4)
            )

chart.set_xticklabels(
    chart.get_xticklabels(), 
    rotation=45, 
    horizontalalignment='right'
)

Вот полная ошибка:

/usr/local/lib/python3.6/dist-packages/pandas/core/groupby/grouper.py in get_grouper(obj, key, axis, level, sort, observed, mutated, validate)
    623                 in_axis=in_axis,
    624             )
--> 625             if not isinstance(gpr, Grouping)
    626             else gpr
    627         )

/usr/local/lib/python3.6/dist-packages/pandas/core/groupby/grouper.py in __init__(self, index, grouper, obj, name, level, sort, observed, in_axis)
    254         self.name = name
    255         self.level = level
--> 256         self.grouper = _convert_grouper(index, grouper)
    257         self.all_grouper = None
    258         self.index = index

/usr/local/lib/python3.6/dist-packages/pandas/core/groupby/grouper.py in _convert_grouper(axis, grouper)
    653     elif isinstance(grouper, (list, Series, Index, np.ndarray)):
    654         if len(grouper) != len(axis):
--> 655             raise ValueError("Grouper and axis must be same length")
    656         return grouper
    657     else:

ValueError: Grouper and axis must be same length

1 Ответ

0 голосов
/ 22 апреля 2020
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
0        1                    Toy Story (1995)  Adventure|Animation|Children|Comedy|Fantasy
1        2                      Jumanji (1995)                   Adventure|Children|Fantasy
2        3             Grumpier Old Men (1995)                               Comedy|Romance
3        4            Waiting to Exhale (1995)                         Comedy|Drama|Romance
4        5  Father of the Bride Part II (1995)                                       Comedy

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

print(df.head())

   movieId             title     genres
0        1  Toy Story (1995)  Adventure
0        1  Toy Story (1995)  Animation
0        1  Toy Story (1995)   Children
0        1  Toy Story (1995)     Comedy
0        1  Toy Story (1995)    Fantasy

Количество жанров

genre_count = pd.DataFrame(df.genres.value_counts())

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

Сюжет

plt.figure(figsize=(16,8))
chart = sns.barplot(genre_count.index, genre_count.genres, palette=sns.color_palette("BuGn_r", n_colors=len(genre_count) + 4))
chart.set_xticklabels(chart.get_xticklabels(), rotation=45, horizontalalignment='right')
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...