我有一个 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)