我有一张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绿色)。我尝试了几件没有好结果的事情。任何帮助实现这一点将不胜感激。
答案 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)