基于值的 Seaborn 条件颜色

Tha*_*tch 5 python seaborn

我有一个 Seaborn 图(在这种情况下是一个箱线图,这是一个简化版本

sns.boxplot(x="Question", y="Score", hue="Item", data=scores[scores['Item']=='34x'], palette="PRGn")
Run Code Online (Sandbox Code Playgroud)

数据看起来像这样......

    Item    Question    Score   Section    Event    Evaluator
    34x       Mar1        4     Maritime    Boat    6
    34x       Mar2        3     Maritime    Boat    6
    34x       Multi1      3     Multinet    Boat    6
    34x       Multi2      3     Multinet    Boat    6
    34x       Noise1      4     Noise       Boat    6
Run Code Online (Sandbox Code Playgroud)

该图渲染得很好,但我想根据每个问题的平均分数为每个问题的箱线图着色。(即任何低于 1 的都是红色,+1-2.5 黄色,+2.5 绿色)。我尝试了几件事,但没有很好的结果。任何帮助实现这一点将不胜感激。

小智 5

您可以使用自定义颜色字典作为箱线图调色板参数,它可以是名称、有序列表或字典。

我生成了一个类似于你的数据框

   Item Question     Score
0     A     Mar1  2.935605
1     A     Mar1  2.754065
2     A     Mar1  3.339259
3     A     Mar1  1.229478
4     A     Mar1  3.248582
5     A     Mar2  0.409028
6     A     Mar2  1.779707
Run Code Online (Sandbox Code Playgroud)

从 df 可以生成自定义调色板:

custom_palette = {}
for q in set(scores.Question):
    avr = (np.average(scores[scores.Question == q].Score))
    if avr < 1:
        custom_palette[q] = 'r'
    elif avr < 2.5:
        custom_palette[q] = 'y'
    else:
        custom_palette[q] = 'g'
Run Code Online (Sandbox Code Playgroud)

并使用它为您的箱线图着色:

sns.boxplot(x="Question", y="Score", data=scores, palette=custom_palette,showmeans=True)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明