gpt4 book ai didi

python - 如何手动为分类变量的类型分配颜色?

转载 作者:行者123 更新时间:2023-12-01 00:19:53 25 4
gpt4 key购买 nike

我正在下面的代码中创建 2 个图。我在 JobDomain 列中将类别值设置为

  • 类别1
  • 类别2
  • 类别3

下面的代码为上述类别生成 2 个图,每个图具有不同的颜色。我需要保持这 3 个类别的两个图具有相同的颜色。

colors = ["#F28E2B", "#4E79A7","#79706E"]

edu = (df.groupby(['JobDomain'])['sal']
.value_counts(normalize=True)
.rename('Percentage')
.mul(100)
.reset_index()
.sort_values('sal'))

coding = (df.groupby(['JobDomain'])['sal2']
.value_counts(normalize=True)
.rename('Percentage')
.mul(100)
.reset_index()
.sort_values('sal2'))

fig, axs = plt.subplots(ncols=2,figsize=(20, 6),sharey=True)

plt.subplots_adjust(wspace=0.4)

p=sns.barplot(x="sal",y="Percentage",hue="JobDomain",data=edu,
ax=axs[0],palette=sns.color_palette(colors))
q=sns.barplot(x="sal2",y="Percentage",hue="JobDomain",data=coding,
ax=axs[1],palette=sns.color_palette(colors))

最佳答案

通过创建一个字典将每个类别映射到一种颜色(并将其传递到 palette 而不调用 sns.color_palette)。一个例子:

import seaborn as sns
from pandas import DataFrame
from matplotlib import pyplot as plt

df = DataFrame({'JobDomain': ['Cat1', 'Cat2', 'Cat3', 'Cat1', 'Cat3'],
'sal': [ 110, 90, 100, 200, 130],
'sal2': [ 100, 280, 320, 240, 440]
})

colors = {'Cat1': "#F28E2B", 'Cat2': "#4E79A7", 'Cat3': "#79706E"}

edu = (df.groupby(['JobDomain'])['sal']
.value_counts(normalize=True)
.rename('Percentage')
.mul(100)
.reset_index()
.sort_values('sal'))
coding = (df.groupby(['JobDomain'])['sal2']
.value_counts(normalize=True)
.rename('Percentage')
.mul(100)
.reset_index()
.sort_values('sal2'))

fig, axs = plt.subplots(ncols=2,figsize=(20, 6),sharey=True)
plt.subplots_adjust(wspace=0.4)
p = sns.barplot(x="sal",y="Percentage",hue="JobDomain",data=edu,ax=axs[0],palette=colors)
q = sns.barplot(x="sal2",y="Percentage",hue="JobDomain",data=coding,ax=axs[1],palette=colors)

h, l = p.get_legend_handles_labels()
l, h = zip(*sorted(zip(l, h)))
p.legend(h, l, title="Job Domain")
q.legend(h, l, title="Job Domain")

plt.show()

PS:要再次对图例进行排序,请在 plt.show() 之前插入:

h, l = p.get_legend_handles_labels()
l, h = zip(*sorted(zip(l, h)))
p.legend(h, l, title="Job Domain")
q.legend(h, l, title="Job Domain")

Example plot

关于python - 如何手动为分类变量的类型分配颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59024513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com