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
相关产品推荐
相关产品推荐

