Чтобы получить категориальный график, вам нужно создать фрейм данных, содержащий категориальный столбец. Я внес небольшие изменения в ваш код в отношении имен столбцов -
импортировать NumPy как NP
импорт морского как sns
импорт панд в виде pd
импорт matplotlib.pyplot как plt
dist_1 = np.random.beta(2.,2.,250)
dist_2 = np.random.beta(3.,4.,250)
data = {"dist1": dist_1, "dist2": dist_2}
df = pd.DataFrame(data=data)
df['id'] = df.index
Я добавил столбец для индекса каждой строки, чтобы использовать его для преобразования этого широкого фрейма данных в длинный.
long_df = pd.wide_to_long(df, 'dist', 'id', 'cat').reset_index()
long_df.head()
# id cat dist
#0 0 1 0.558567
#1 1 1 0.265868
#2 2 1 0.076470
#3 3 1 0.891855
#4 4 1 0.215208
Теперь я хочу использовать столбец cat на оси x области catplot, dist на оси y и создать точечный график для каждой строки в исходном кадре данных.
sns.catplot(x="cat", y="dist", hue='id', kind="point", data=long_df, legend=False)
plt.show()
Это дает вам следующий сюжет -
![Catplot](https://i.stack.imgur.com/Z9uTQ.png)
Бонус : Вы также можете сделать то же самое, используя линейный график и добавить маркеры для среднего.
mean_df = long_df.groupby('cat')['dist'].mean().reset_index()
mean_df
# cat dist
#0 1 0.535771
#1 2 0.399939
fig = plt.figure()
ax1 = fig.add_subplot(111)
sns.lineplot(x='cat', y='dist', hue='id', data=long_df, legend=False, ax=ax1)
ax1.plot(mean_df['cat'], mean_df['dist'], 'x')
plt.show()
Что дает тебе -
![Line plot with mean added](https://i.stack.imgur.com/Oaa03.png)
«Х» в каждой категории обозначает среднее. Надеюсь, это поможет!