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

如何根据Trimestre值修改Pandas柱状图的条形颜色?

根据Trimestre值为柱状图条形上色解决方案

没问题!我来帮你实现根据Trimestre值给柱状图条形上色的需求~下面我会结合示例数据,分别用matplotlib和seaborn两种常用绘图库来演示实现方法,你可以根据自己的使用习惯选择。

准备示例数据(对应你的DataFrame结构)

首先我先构造一个和你结构一致的多层索引DataFrame,方便你对应自己的数据:

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

# 构造与你结构匹配的示例数据
data = {
    'Cantidad': [12, 18, 9, 15, 11, 16],
    'Trimestre': [1, 1, 2, 2, 3, 3],
    'Proovedor': ['Proveedor A', 'Proveedor B', 'Proveedor A', 'Proveedor B', 'Proveedor A', 'Proveedor B'],
    'Tipo': ['Tipo X', 'Tipo Y', 'Tipo X', 'Tipo Y', 'Tipo X', 'Tipo Y']
}
df = pd.DataFrame(data).set_index(['Trimestre', 'Proovedor', 'Tipo'])

方法一:使用Matplotlib实现

步骤1:提取每个条形对应的Trimestre值

因为你的DataFrame是多层索引,我们可以直接从索引的第0层(Trimestre层)提取每个数据行对应的季度值:

# 从多层索引中提取每个条形对应的Trimestre
trimestres = df.index.get_level_values('Trimestre')

步骤2:定义季度与颜色的映射关系

你可以根据喜好自定义每个季度对应的颜色:

# 自定义季度-颜色映射字典
color_map = {
    1: '#FF5733',   # 橙色
    2: '#33FF57',   # 绿色
    3: '#3357FF',   # 蓝色
    4: '#FF33A6'    # 粉色(如果有第4季度)
}
# 生成每个条形对应的颜色列表
bar_colors = [color_map[t] for t in trimestres]
# 可选:如果怕有未定义的季度值,添加默认灰色兜底
# bar_colors = [color_map.get(t, '#CCCCCC') for t in trimestres]

步骤3:绘制带颜色的柱状图

# 创建绘图对象
fig, ax = plt.subplots(figsize=(10, 6))

# 绘制柱状图并指定颜色
bars = ax.bar(df.index, df['Cantidad'], color=bar_colors)

# 优化x轴标签(多层索引标签较长,旋转后更易读)
ax.set_xticklabels(df.index, rotation=45, ha='right')

# 添加自定义图例(展示每个季度对应的颜色)
from matplotlib.patches import Patch
legend_elements = [Patch(facecolor=color_map[t], label=f'Trimestre {t}') for t in color_map.keys()]
ax.legend(handles=legend_elements, loc='upper right')

# 添加标题和轴标签
plt.title('Cantidad por Trimestre, Proveedor y Tipo', fontsize=14)
plt.ylabel('Cantidad', fontsize=12)
plt.tight_layout()
plt.show()

方法二:使用Seaborn实现(更简洁)

Seaborn的barplot支持直接用hue参数按列分组上色,我们只需要先把多层索引重置为普通列即可:

# 将多层索引重置为普通列,方便Seaborn调用
df_reset = df.reset_index()

# 绘制柱状图,用hue指定按Trimestre分组上色
plt.figure(figsize=(10, 6))
sns.barplot(
    data=df_reset,
    x=df_reset.index,  # 用行索引作为x轴位置
    y='Cantidad',
    hue='Trimestre',
    palette=color_map  # 复用之前定义的颜色映射
)

# 自定义x轴标签,展示完整的Trimestre-Proovedor-Tipo信息
plt.xticks(
    ticks=range(len(df_reset)),
    labels=df_reset.apply(lambda row: f"{row['Trimestre']} | {row['Proovedor']} | {row['Tipo']}", axis=1),
    rotation=45,
    ha='right'
)

# 添加标题和轴标签
plt.title('Cantidad por Trimestre, Proveedor y Tipo', fontsize=14)
plt.ylabel('Cantidad', fontsize=12)
plt.tight_layout()
plt.show()

这样就能轻松实现按Trimestre值给不同条形上色的效果啦!如果你的季度数量更多,只需要在color_map里添加对应的键值对即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:47:46