Python Matplotlib 绘制表格

最近因为开发一个项目,需要用到Matplotlib绘制一些图片和表格,网上找到的一些,感觉总差点意思,绘制个表格感觉有点过于麻烦,因此自己整理了下。

绘制方法直接使用Matplotlib绘制,没有使用别的依赖,我觉得还是比较简洁的,希望对你有所帮助,如果有用,还请给点个赞。

效果图如下所示,如果数据过长的话,可以考虑把横纵交换下,结果如左图所示,显示效果会好一些:

Python Matplotlib 绘制表格_python

代码如下:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(1, 2)

# 左侧边栏,如果不需要,在plt.table中注释即可
# rowLabels 与 rowColours中的数据长度要保持一致,同时和数据中的元素个数保持一致--len(data)
rowLabels = ['state', '↑', '↓', '←', '→', 'up', 'down', 'fire']
rowColours = ["#EBB25E", "#F0C9C0", "#F0C9C0", "#F0C9C0", "#F0C9C0", "#F0C9C0", "#F0C9C0", "#F2F2F2"]

# 列表头颜色,需要和单条数据长度保持一致--len(data[0])
colColors = ["#377eb8"]
colColors.extend(["#00ccff"] * 20)

# 左侧结果图数据
data = [[1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]]

column_labels = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21"]

# 取消坐标轴
ax[0].axis('off')
ax[0].table(cellText=data,
colLabels=column_labels,
colColours=colColors,
rowColours=rowColours,
rowLabels=rowLabels,
cellLoc='center',
rowLoc='center',
loc="center")

#数据转置,右侧图数据
transpose_data = np.array(data)
transpose_data = np.transpose(transpose_data).tolist()
# print(transpose_data)
# 取消坐标轴
ax[1].axis('off')
ax[1].table(cellText=transpose_data,
colLabels=rowLabels,
colColours=rowColours,
rowColours=colColors,
rowLabels=column_labels,
cellLoc='center',
rowLoc='center',
loc="center")
# 将图标保存到硬盘
# plt.savefig('fix.jpg', dpi=300)
plt.show()

表格的横纵表头是支持除字母外的一些简单符号的,比如↑↓←→等,一定程度上还是优化显示的。另一方面,数据部分也是支持字符串的,也支持一些简单的符号,展示效果如下所示:

Python Matplotlib 绘制表格_表格_02