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

使用Matplotlib绘制Pandas多列数据时颜色列表传参报错求助

解决Matplotlib传递颜色列表时的"Invalid RGBA argument"错误

你在尝试用pandas多列数据绘制柱状图时踩了颜色参数的坑~我来帮你搞定这个问题。

错误原因分析

你遇到的Invalid RGBA argument错误,本质是颜色列表的维度和matplotlib预期不匹配:ax.bar()的color参数要么接受单个颜色值(给所有柱子用同一种颜色),要么接受和单组柱子数量一致的颜色列表。如果直接把多列数据丢给ax.bar(),同时传递和列数匹配的颜色列表,matplotlib会把所有柱子(行数×列数)当成一组,这时候颜色列表长度不够,就会触发报错。

修复后的代码示例

下面分两种常见场景给出正确写法:

场景1:分组柱状图

如果想把每列数据作为一组并排展示:

import pandas as pd
from matplotlib import pyplot as plt

df = pd.DataFrame({'0':[0,1,0],'a':[1,2,3],'b':[2,4,6],'c':[5,3,1]})
colors = ['r','g','b']
fig, ax = plt.subplots()

bar_width = 0.25  # 每组柱子的宽度
x = df.index.values

# 循环遍历每一列,给每列分配对应颜色
for idx, col in enumerate(['a', 'b', 'c']):
    ax.bar(x + idx*bar_width, df[col], width=bar_width, color=colors[idx], label=col)

# 设置x轴刻度和图例
ax.set_xticks(x + bar_width)
ax.set_xticklabels(x)
ax.legend()

plt.show()

场景2:堆叠柱状图

如果想把每列数据堆叠在一起展示:

import pandas as pd
from matplotlib import pyplot as plt

df = pd.DataFrame({'0':[0,1,0],'a':[1,2,3],'b':[2,4,6],'c':[5,3,1]})
colors = ['r','g','b']
fig, ax = plt.subplots()

bottom_data = None  # 记录上一层柱子的高度,用于堆叠
for idx, col in enumerate(['a', 'b', 'c']):
    ax.bar(df.index.values, df[col], bottom=bottom_data, color=colors[idx], label=col)
    # 更新堆叠的底部高度
    if bottom_data is None:
        bottom_data = df[col]
    else:
        bottom_data += df[col]

ax.legend()
plt.show()

核心思路总结

  • 不要一次性给ax.bar()传递多列数据,而是每列单独调用一次ax.bar()
  • 每次调用时,从颜色列表中取对应位置的单个颜色值传递给color参数
  • 分组图通过调整x轴位置实现,堆叠图通过bottom参数控制层级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:09:21