Как усреднить расстояние на графике seaborn.scatterplot между подписями?

Суть в чем. У меня есть табличка(около 500к строк), один из столбцов - номер документа. Всего их около 2к, но пронумерованы они с 3 до примерно 9к, то есть идут не подряд. Еще один столбец - дата. Мне нужно построить график, чтобы было видно сколько было записей и когда в каждом конкретном документе, потому решил использовать scatterplot. Даже 2к документов много, потому разбиваю их на 3 части, где-то по 700 в каждой, и откладываю номера документов по вертикали. Проблема возникает такая - я хочу чтобы между всеми подписями по оси y было одинаковое расстояние, не зависящее от того что идет например документ номер 4555, а потом 4898, чтобы между ними было расстояние как если бы все шли подряд - 1, 2, 3... . А по итогу где-то остается куча пустого места, а где-то записи наезжают друг на друга. Я попробовал пронумеровать документы отдельно, и использовать в set_yticks, а для set_yticklabels изначальные номера документов, но лучше не стало. Надеюсь в целом доступно описал проблему) Номер документа - столбец diary. Так выглядит нынешний код:

plt.figure(figsize = (70, 900));
sns.set(font_scale = 4);
ax = sns.scatterplot(y = 'diary', x = 'year', data = df, s = 500)
ax.tick_params(top = True, labeltop = True)
ax.grid(b = True,
    color = 'black',
    linewidth = 2,
    linestyle = '--');
ax.set_yticks(np.arange(0, 1361, 1));
ax.set_yticklabels(df['diary'].tolist())
ax.set_xticks(np.arange(1710, 2020, 10));
plt.xticks(rotation=45);

Ответы (1 шт):

Автор решения: CrazyElf

Наверняка можно как-то проще, но у меня получилось только вот так, с помощью маппинга значений diary в range непрерывных значений.

diary_uniq = df['diary'].unique()
diary_map = dict(zip(sorted(diary_uniq), range(len(diary_uniq))))
...
ax = sns.scatterplot(y = df['diary'].map(diary_map), \
                     x = 'year', data = df, s = 500)
...
ax.set_yticks(list(diary_map.values()));
ax.set_yticklabels(list(diary_map.keys()))

Пример получающейся картинки на искусственных данных.

введите сюда описание изображения

→ Ссылка