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

如何基于数值为Pandas多列条形图的每个柱子设置不同颜色

分组条形图按值自定义颜色实现方案

核心思路

pandas调用plot()方法生成条形图后,所有柱子对象都会存储在返回的Axes对象的patches属性中,只需遍历所有柱子,根据柱子高度(即对应销售额数值)判断修改填充色即可,无需单独适配多列逻辑,支持任意列数的数据集。

完整实现代码

步骤1:导入依赖与构造示例数据

import pandas as pd
import matplotlib.pyplot as plt

# 构造示例数据:行为地区,列为季度,可替换为你的14列DataFrame
data = {
    "Q1": [52000, 63000, 48000, 71000],
    "Q2": [58000, 59000, 65000, 49000],
    "Q3": [61000, 47000, 72000, 56000],
    "Q4": [75000, 62000, 54000, 68000]
}
df = pd.DataFrame(data, index=["华东", "华北", "华南", "西南"])

步骤2:绘图与颜色修改

# 生成分组条形图,拿到Axes对象
ax = df.plot(kind="bar", figsize=(10, 6), edgecolor="black")

threshold = 60000 # 销售额阈值:高于6万标红
# 遍历所有柱子修改颜色
for patch in ax.patches:
    sale_value = patch.get_height()
    if sale_value > threshold:
        patch.set_facecolor("red")
    else:
        patch.set_facecolor("#1f77b4") # 基础蓝色,可替换为其他蓝色系色值

# 图表样式优化
plt.title("各地区季度销售额统计", fontsize=12)
plt.xlabel("地区", fontsize=10)
plt.ylabel("销售额(元)", fontsize=10)
plt.xticks(rotation=0)
plt.legend(title="季度")
plt.tight_layout()
plt.show()

扩展:蓝色系渐变效果

如果需要低于阈值的柱子按数值高低显示深浅不同的蓝色,可引入matplotlib的颜色映射实现:

from matplotlib.colors import Normalize
from matplotlib.cm import Blues

ax = df.plot(kind="bar", figsize=(10, 6), edgecolor="black")
threshold = 60000

# 归一化低于阈值的数值范围,映射蓝色系
norm = Normalize(vmin=df.min().min(), vmax=threshold)
cmap = Blues

for patch in ax.patches:
    sale_value = patch.get_height()
    if sale_value > threshold:
        patch.set_facecolor("red")
    else:
        patch.set_facecolor(cmap(norm(sale_value)))

# 其余样式优化代码同上

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:27:02