Seaborn条件颜色基于价值

时间:2016-02-02 01:45:51

标签: python seaborn

我有一张Seaborn图(在这种情况下是一个盒子图,这里是一个简化版

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

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

    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

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

1 个答案:

答案 0 :(得分:1)

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

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

   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

从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'

并用它来为你的盒子颜色着色:

sns.boxplot(x="Question", y="Score", data=scores, palette=custom_palette,showmeans=True)

enter image description here

相关问题