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

Matplotlib绘制DataFrame表格报错:cellColours每行需含2列

解决Matplotlib绘制表格时的ValueError错误

问题描述

想要将Pandas DataFrame转换为可视化表格,编写了如下代码:

import pandas as pd
import matplotlib.pyplot as plt

# 创建DataFrame
df = pd.DataFrame({'Name':['John','Barry','Irene','Paul','Ricky','Jenny','Tina','Linda','Toby','Peter'],
                   'Age':[19,20,17,19,18,21,19,21,18,20]})

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

# 定义颜色映射
cmap = {0:'b', 1:'y', 2:'k', 3:'gray'}
cell_colours = []
for n in range(len(df.index)):
    if n<4:
        cell_colours.append(cmap[0])
    elif 4<=n<8:
        cell_colours.append(cmap[1])
    elif 8<=n<12:
        cell_colours.append(cmap[2])
    else:
        cell_colours.append(cmap[3])

# 绘制表格
table = ax.table(cellText=df.values, colLabels=df.columns, loc='center', 
                 cellColours=cell_colours)

# 尝试添加轴到画布
fig.add_axes(ax)

# 显示绘图
plt.show()

运行后出现报错:ValueError: Each row in 'cellColours' must have 2 columns

错误原因

cellColours参数要求传入二维列表,每个子列表对应表格一行中的所有单元格颜色。你的代码生成的cell_colours是一维列表,每个元素仅为单个颜色字符串,但表格有2列(Name和Age),每行需要提供与列数匹配的颜色值(即使整行用同一种颜色),因此触发了维度不匹配的报错。

另外,fig.add_axes(ax)是多余操作——ax已经是plt.subplots()创建的绘图轴,重复添加会引发潜在问题,建议删除。

修正后的代码

import pandas as pd
import matplotlib.pyplot as plt

# 创建DataFrame
df = pd.DataFrame({'Name':['John','Barry','Irene','Paul','Ricky','Jenny','Tina','Linda','Toby','Peter'],
                   'Age':[19,20,17,19,18,21,19,21,18,20]})

# 创建绘图对象并隐藏坐标轴(仅显示表格)
fig, ax = plt.subplots()
ax.axis('off')

# 定义颜色映射
cmap = {0:'b', 1:'y', 2:'k', 3:'gray'}
cell_colours = []
for n in range(len(df.index)):
    if n < 4:
        # 每行2列,传入包含两个相同颜色的子列表
        cell_colours.append([cmap[0], cmap[0]])
    elif 4 <= n < 8:
        cell_colours.append([cmap[1], cmap[1]])
    elif 8 <= n < 12:
        cell_colours.append([cmap[2], cmap[2]])
    else:
        cell_colours.append([cmap[3], cmap[3]])

# 绘制表格
table = ax.table(cellText=df.values, colLabels=df.columns, loc='center', 
                 cellColours=cell_colours)

# 可选:调整表格字体大小提升可读性
table.auto_set_font_size(False)
table.set_fontsize(12)

# 显示绘图
plt.show()

关键调整说明

  • 将每个颜色值改为包含两个相同颜色的子列表,确保每行颜色数量与表格列数一致
  • 添加ax.axis('off')隐藏坐标轴,让表格显示更简洁
  • 可选调整字体大小优化视觉效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:52:48