为多个数据帧的多个绘图设置相同的调色板
我正在使用 seaborn
和 t -SNE 可视化类可分离性/重叠,并在我的数据集中包含五个类。因此,我的情节是 2x2 子情节。我使用以下函数生成下图。
def pair_plot_tsne(df):
tsne = TSNE(verbose=1, random_state=234)
df1 = df[(df['mode'] != 'car') & (df['mode'] != 'bus')]
tsne1 = tsne.fit_transform(df1[cols].values) # cols - df's columns list
df1['tsne_one'] = tsne1[:, 0]
df1['tsne-two'] = tsne1[:, 1]
df2 = df[(df['mode'] != 'foot') & (df['mode']!= 'bus')]
tsne2 = tsne.fit_transform(df2[cols].values)
df2['tsne_one'] = tsne2[:, 0]
df2['tsne-two'] = tsne2[:, 1]
df3 = df[df['mode'] != 'car']
tsne3 = tsne.fit_transform(df3[cols].values)
df3['tsne_one'] = tsne3[:, 0]
df3['tsne-two'] = tsne3[:, 1]
df4 = df[df['mode'] != 'foot']
tsne4 = tsne.fit_transform(df4[cols].values)
df4['tsne_one'] = tsne4[:, 0]
df4['tsne-two'] = tsne4[:, 1]
#create figure
f = plt.figure(figsize=(16,4))
ax1 = plt.subplot(2, 2, 1)
sns.scatterplot( #df1 has 3 classes, so 3 colors
x ='tsne_one', y='tsne-two', hue = 'mode', data = df1, palette = sns.color_palette('hls', 3),
legend='full', alpha = 0.7, ax = ax1 )
ax2 = plt.subplot(2, 2, 2)
sns.scatterplot( #df2 has 3 classes, so 3 colors
x ='tsne_one', y='tsne-two', hue = 'mode', data = df2, palette = sns.color_palette('hls', 3),
legend='full', alpha = 0.7, ax = ax2 )
ax3 = plt.subplot(2, 2, 3)
sns.scatterplot( #df3 has 4 classes, so 4 colors
x ='tsne_one', y='tsne-two', hue = 'mode', data = df3, palette = sns.color_palette('hls', 4),
legend='full', alpha = 0.7, ax = ax3 )
ax4 = plt.subplot(2, 2, 4)
sns.scatterplot( #df4 has 4 classes, so 4 colors
x ='tsne_one', y='tsne-two', hue = 'mode', data = df4, palette = sns.color_palette('hls', 4),
legend='full', alpha = 0.7, ax = ax4 )
return f, ax1, ax2, ax3, ax4
我希望每个类的颜色保持一致,无论它出现在哪个图中。对于类,无论出现在哪个子图中,汽车
模式的蓝色
颜色,总线
模式的黑色
颜色它出现在哪个绘图中,等等...
现在,foot
在 subplot(2, 2, 1)
中是红色的,car< /code> 在
subplot(2, 2, 2)
虽然其余部分是一致的。
I am using seaborn
and and t-SNE to visualise class separability/overlap and in my dataset containing five classes. My plot is thus a 2x2 subplots. I used the following function which generates the figure below.
def pair_plot_tsne(df):
tsne = TSNE(verbose=1, random_state=234)
df1 = df[(df['mode'] != 'car') & (df['mode'] != 'bus')]
tsne1 = tsne.fit_transform(df1[cols].values) # cols - df's columns list
df1['tsne_one'] = tsne1[:, 0]
df1['tsne-two'] = tsne1[:, 1]
df2 = df[(df['mode'] != 'foot') & (df['mode']!= 'bus')]
tsne2 = tsne.fit_transform(df2[cols].values)
df2['tsne_one'] = tsne2[:, 0]
df2['tsne-two'] = tsne2[:, 1]
df3 = df[df['mode'] != 'car']
tsne3 = tsne.fit_transform(df3[cols].values)
df3['tsne_one'] = tsne3[:, 0]
df3['tsne-two'] = tsne3[:, 1]
df4 = df[df['mode'] != 'foot']
tsne4 = tsne.fit_transform(df4[cols].values)
df4['tsne_one'] = tsne4[:, 0]
df4['tsne-two'] = tsne4[:, 1]
#create figure
f = plt.figure(figsize=(16,4))
ax1 = plt.subplot(2, 2, 1)
sns.scatterplot( #df1 has 3 classes, so 3 colors
x ='tsne_one', y='tsne-two', hue = 'mode', data = df1, palette = sns.color_palette('hls', 3),
legend='full', alpha = 0.7, ax = ax1 )
ax2 = plt.subplot(2, 2, 2)
sns.scatterplot( #df2 has 3 classes, so 3 colors
x ='tsne_one', y='tsne-two', hue = 'mode', data = df2, palette = sns.color_palette('hls', 3),
legend='full', alpha = 0.7, ax = ax2 )
ax3 = plt.subplot(2, 2, 3)
sns.scatterplot( #df3 has 4 classes, so 4 colors
x ='tsne_one', y='tsne-two', hue = 'mode', data = df3, palette = sns.color_palette('hls', 4),
legend='full', alpha = 0.7, ax = ax3 )
ax4 = plt.subplot(2, 2, 4)
sns.scatterplot( #df4 has 4 classes, so 4 colors
x ='tsne_one', y='tsne-two', hue = 'mode', data = df4, palette = sns.color_palette('hls', 4),
legend='full', alpha = 0.7, ax = ax4 )
return f, ax1, ax2, ax3, ax4
Since I'm plotting a subset of the dataset in each subplot, I would like to have the color of each class consistent, in whichever plot it appears. For class, a blue
color for the car
mode in whichever subplot it appears, a black
color for bus
mode in which ever plot it appears, etc...
As it is now, foot
is red in subplot(2, 2, 1)
, and also car
is read in subplot(2, 2, 2)
although the rest are consistent.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于这个用例,seaborn 允许字典作为调色板。字典将为每个色调值分配一个颜色。
以下是如何为您的数据创建此类字典的示例:
您可能还需要单个人物级别图例
For this use case, seaborn allows a dictionary as palette. The dictionary will assign a color to each hue value.
Here is an example of how such a dictionary could be created for your data:
You may also want a single figure level legend