Я экспериментирую с JointGrid
от Seaborn
. Я использовал .plot_joint()
, чтобы построить график рассеяния, цвет группы, используя параметр hue
. Я отфильтровал свой набор данных, чтобы он включал только 2 из 5 групп, чтобы предотвратить слишком частое совпадение на графиках.
Точки на графике выглядят правильно, так как они соответствуют тому, что я ожидаю от двух выбранных мной групп. Кроме того, я дважды проверил свою фильтрацию, просмотрев отфильтрованный фрейм данных. Это тоже было правильно, поскольку в нем были только две выбранные мной группы.
Однако легенда, которая автоматически наносится вместе с диаграммой рассеяния, неверна. Это показывает 4 группы (не уверен, почему не 5), и раскраска также неверна. Для 2 групп я бы ожидал только красный и синий цвета (первые 2 цвета в палитре Set1
), но моя вторая группа окрашена в 4-й цвет в палитре Set1
.
plt.rcParams['figure.figsize'] = (12, 4)
df_tmp = df[df.Kmeans_Clusters.isin([0, 3])].copy()
# initialize Joint Grid
grid = sns.JointGrid(data=df_tmp, x='MP', y='PTS')
# plot scatter (main plot)
grid = grid.plot_joint(sns.scatterplot, data=df_tmp, hue='Kmeans_Clusters',
palette='Set1')
# plot marginal distplot for cluster 0, X & Y
sns.distplot(df_tmp[df_tmp.Kmeans_Clusters == 0].MP, ax=grid.ax_marg_x,
vertical=False, color='firebrick', label='Cluster0')
sns.distplot(df_tmp[df_tmp.Kmeans_Clusters == 0].PTS, ax=grid.ax_marg_y,
vertical=True, color='firebrick', label='Cluster0')
# plot marginal distplot for cluster 3, X & Y
sns.distplot(df_tmp[df_tmp.Kmeans_Clusters == 3].MP, ax=grid.ax_marg_x,
vertical=False, color='steelblue', label='Cluster3')
sns.distplot(df_tmp[df_tmp.Kmeans_Clusters == 3].PTS, ax=grid.ax_marg_y,
vertical=True, color='steelblue', label='Cluster3')
plt.suptitle('PTS vs MP, Cluster 0 & 3\n1982-2019', y=1.05, fontsize=20)
plt.show()
jointgrid_incorrect_legend_and_coloring
--- Обновление --- Я только что попробовал это с простым scatterplot
(нет JointGrid
), и я могу повторить свое предыдущее наблюдение. Есть ли что-то, чего я не понимаю с параметром hue
и функцией scatterplot()
?
Я не вижу этой проблемы с lmplot()
plt.rcParams['figure.figsize'] = (12, 4)
df_tmp = df[df.Kmeans_Clusters.isin([0, 3])].copy()
sns.scatterplot(data=df_tmp, y='PTS', x='MP', hue='Kmeans_Clusters', palette='Set1')
plt.title('PTS vs MP\n1982-2019')
plt.xlabel('Minutes Played Annually')
plt.ylabel('Points Scored Annually')
plt.show()