You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义Seaborn Barplot中hue参数生成的分类配色

解决方法

你之前使用color参数无法实现需求的原因是:该参数仅用于设置统一的基础色调,Seaborn会基于该颜色自动生成同色系明暗渐变,不支持传入多色列表匹配hue的多个分类。要自定义hue对应的分类配色,需要使用palette参数。

具体实现步骤:

  • 定义和hue分类顺序匹配的颜色列表,你的status分类顺序是["Early", "On Time", "Overdue", "Long Overdue"],对应你要的蓝、绿、黄、红顺序,可直接使用如下颜色列表(也可以替换为你需要的具体色值,支持颜色名、十六进制、RGB元组等格式):
custom_palette = ["#165DFF", "#00B42A", "#FFDD00", "#F53F3F"]
  • 在调用sns.barplot时传入palette=custom_palette参数即可。

修改后完整运行代码

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

df = pd.DataFrame({'Early': {'A': 686, 'B': 533, 'C': 833, 'D': 625, 'E': 820},
 'Long Overdue': {'A': 203, 'B': 237, 'C': 436, 'D': 458, 'E': 408},
 'On Time': {'A': 881, 'B': 903, 'C': 100, 'D': 53, 'E': 50},
 'Overdue': {'A': 412, 'B': 509, 'C': 813, 'D': 1046, 'E': 904}})

df_long = df.unstack().to_frame(name='value')
df_long = df_long.swaplevel()
df_long.reset_index(inplace=True)
df_long.columns = ['group', 'status', 'value']
df_long['status'] = pd.Categorical(df_long['status'], ["Early", "On Time", "Overdue", "Long Overdue"])
df_long = df_long.sort_values("status")

fig, ax = plt.subplots(figsize=(18.5, 10.5))
# 新增自定义配色、传入palette参数
custom_palette = ["#165DFF", "#00B42A", "#FFDD00", "#F53F3F"]
g = sns.barplot(data=df_long, x='group', y='value', hue='status', palette=custom_palette, ax=ax)

for bar in g.patches:
    height = bar.get_height()
    ax.text(bar.get_x() + bar.get_width() / 2., 0.5 * height, int(height),
                ha='center', va='center', color='white')
plt.xticks(fontsize=12)
plt.legend(loc='upper left', prop={'size': 14})

ax.xaxis.label.set_visible(False)
ax.axes.get_yaxis().set_visible(False)
plt.show()

内容的提问来源于stack exchange,提问作者The Singularity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 07:57:02