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

如何用DataFrame.plot绘制配对列柱状图:同对同色且其一无填充

为配对列DataFrame绘制带配对颜色的柱状图

问题描述

我有一个包含配对列的多层索引DataFrame,想要绘制柱状图时实现:

  • 每一对列使用唯一的颜色
  • 每对中的一列有填充色,另一列无填充但保留同色边缘

尝试直接使用df.plot.bar()指定color和edgecolor参数,但误以为edgecolor是按行应用,而ChatGPT给出的手动循环绘制方案过于冗长,希望找到基于DataFrame.plot的简洁实现方式。

简洁解决方案

可以通过自动生成color和edgecolor参数列表,直接传递给df.plot.bar(),无需手动绘制每个柱子:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    ('A', '1'): [1, 2, 3],
    ('A', '2'): [4, 5, 6],
    ('B', '1'): [7, 8, 9],
    ('B', '2'): [10, 11, 12]
})

# 定义每个配对组的颜色(数量与配对组一致)
pair_colors = ['C0', 'C1']

# 生成color列表:每组第一列用对应颜色,第二列无填充
color_list = []
# 生成edgecolor列表:每组两列都使用对应组的颜色
edgecolor_list = []
for color in pair_colors:
    color_list.extend([color, 'none'])
    edgecolor_list.extend([color, color])

# 绘制柱状图
ax = df.plot.bar(color=color_list, edgecolor=edgecolor_list)
ax.set_title('配对列柱状图(填充/无填充配对)')
ax.legend(title='列标签')

方案说明

  1. 列表生成逻辑:遍历每个配对组的颜色,为每组的两列分别设置color(填充色/无填充)和edgecolor(统一组颜色),避免手动逐个列指定参数,适配任意数量的配对组。
  2. 基于DataFrame.plot:完全利用pandas内置的绘图接口,无需手动调用matplotlib的ax.bar(),代码更简洁且保留pandas绘图的便捷性(自动处理索引、图例等)。
  3. 效果验证:每对列的第一个柱子有填充色,第二个柱子无填充但边缘与同组颜色一致,完全符合需求。

补充说明

如果你的pandas版本较新,其实最初尝试的代码逻辑是正确的——edgecolor参数列表是按列分配的,每个列的所有柱子都会使用对应边缘颜色。自动生成列表的方式只是让代码更易维护,避免手动写死参数列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:21:15