matplotlib 如何在seaborn中的多个图中保持色调关联?

wfypjpf4  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(83)

以下面的代码为例,我如何将在图1中看到的列-颜色关联保留在它下面的图2中?
有没有一种方法可以指示sns在特定点“跳过”一个色调?我正在寻找一个简单的解决办法,我可以控制精细,理想情况下没有手动分配十六进制代码。
为了清楚起见,在图2中,我希望'C'显示为绿色,'E'显示为紫色。
任何建议都很感激,谢谢。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

np.random.seed(42)

df_1 = pd.DataFrame(np.random.rand(5, 5), columns=['A', 'B', 'C', 'D', 'E'])

df_2 = df_1.drop(['B', 'D'], axis=1)
  • 图1 -
sns.boxplot(data=df_1,
            orient="h")
plt.show()

  • 情节2 -
sns.boxplot(data=df_2,
            orient="h")
plt.show()

osh3o9ms

osh3o9ms1#

将字典传递给boxplotpalette

# all unique keys
keys = df_1.columns.union(df_2.columns).unique()
# or for more dataframes:
# set().union(*(df.columns for df in [df_1, df_2, df_3, df_4]))
# ['A', 'B', 'C', 'D', 'E']

# create key: color dictionary
colors = dict(zip(keys, sns.color_palette('Set1')))

# plot 1
sns.boxplot(data=df_1, orient='h', palette=colors)
# plot 2
sns.boxplot(data=df_2, orient='h', palette=colors)
  • 注意:您可以用颜色列表(例如:['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00']).*

如果您使用seaborn的调色板,请记住,有些调色板的颜色数量有限。要在其上循环,请用途:

import itertools

colors = dict(zip(keys, itertools.cycle(sns.color_palette('Set1'))))

输出:

sns.palplot(colors.values())

相关问题