基于matplotlib和plottable库绘制精美表格
plottable是一个Python库,用于在matplotlib中绘制精美定制的图形表格。plottable的官方仓库地址为:plottable。本文主要参考其官方文档,plottable的官方文档地址为:plottable-doc。plottable安装命令如下:
pip install plottable
本文所有代码见:Python-Study-Notes
# jupyter notebook环境去除warningimport warningswarnings.filterwarnings("ignore")import plottable# 打印plottable版本print('plottable version:', plottable.__version__)# 打印matplotlib版本import matplotlib as pltprint('matplotlib version:', plt.__version__)
plottable version: 0.1.5matplotlib version: 3.5.3
目录
1 使用说明
1.1 基础使用
1.2 列的样式自定义
1.3 行列自定义
2 绘图实例
2.1 多行样式设置
2.2 自定义单元格效果
2.3 热图
2.4 女子世界杯预测数据展示
2.5 德甲积分排名榜展示
3 参考
1 使用说明
1.1 基础使用
下面的代码展示了一个简单的图形表格绘制示例,plottable提供了Table类以创建和展示图形表格。
import matplotlib.pyplot as pltimport numpy as npimport pandas as pdfrom plottable import Table# 生成一个包含随机数据的表格d = pd.DataFrame(np.random.random((5, 5)), columns=["A", "B", "C", "D", "E"]).round(2)fig, ax = plt.subplots(figsize=(6, 5))# 基于pandas表格数据创建和展示图形表格tab = Table(d)# 保存图片plt.savefig("table.jpg", dpi=300,bbox_inches='tight')plt.show()
对于plottable的Table类,其构造参数介绍如下:
df: pd.DataFrame, 要显示为表格的DataFrame对象
ax: mpl.axes.Axes, 绘制表格的坐标轴对象,默认为None
index_col: str, DataFrame中的索引列名。默认为None
columns: List[str], 哪些列用于绘图。为None表示使用所有列
column_definitions: List[ColumnDefinition], 需要设置样式列的style定义类,默认为None
textprops: Dict[str, Any], 文本属性的字典,默认为空字典
cell_kw: Dict[str, Any], 单元格属性的字典,默认为空字典
col_label_cell_kw: Dict[str, Any], 列标签单元格属性的字典,默认为空字典
col_label_divider: bool, 是否在列标签下方绘制分隔线,默认为True。
footer_divider: bool, 是否在表格下方绘制分隔线,默认为False。
row_dividers: bool, 是否显示行分隔线,默认为True
row_divider_kw: Dict[str, Any], 行分隔线属性的字典,默认为空字典
col_label_divider_kw: Dict[str, Any], 列标签分隔线属性的字典,默认为空字典
footer_divider_kw: Dict[str, Any], 页脚分隔线属性的字典,默认为空字典
column_border_kw: Dict[str, Any], 列边框属性的字典,默认为空字典
even_row_color: str | Tuple, 偶数行单元格的填充颜色,默认为None
odd_row_color: str | Tuple, 奇数行单元格的填充颜色,默认为None
在这些参数之中,控制表格绘图效果的参数有以下几类:
column_definitions:列的样式自定义
textprops:文本的样样式自定义
cell_kw:表格单元格的样式自定义
其他设置参数的样式
在这些参数中,最重要的参数是column_definitions,因为column_definitions可以控制几乎所有的绘图效果。接下来本文主要对column_definitions的使用进行具体介绍。
1.2 列的样式自定义
plottable提供了ColumnDefinition类(别名ColDef)来自定义图形表格的单个列的样式。ColumnDefinition类的构造参数如下:
name: str,要设置绘图效果的列名
title: str = None,用于覆盖列名的绘图标题
width: float = 1,列的宽度,默认情况下各列的宽度为轴的宽度/列的总数
textprops: Dict[str, Any] = field(default_factory=dict),提供给每个文本单元格的文本属性
formatter: Callable = None,用于格式化文本外观的可调用函数
cmap: Callable = None,根据单元格的值返回颜色的可调用函数
text_cmap: Callable = None,根据单元格的值返回颜色的可调用函数
group: str = None,设置每个组都会在列标签上方显示的分组列标签
plot_fn: Callable = None,一个可调用函数,将单元格的值作为输入,并在每个单元格上创建一个子图并绘制在其上
要向其传递其他参数plot_kw: Dict[str, Any] = field(default_factory=dict),提供给plot_fn的附加关键字参数
border: str | List = None,绘制垂直边界线,可以是"left" / "l"、"right" / "r"或"both"
通过ColumnDefinition类来设置Table类的column_definitions参数,可以实现不同表格列样式的效果。如果是同时多个列的绘图效果,则需要使用[ColumnDefinition,ColumnDefinition]列表的形式。一些使用示例如下
设置列标题和列宽
import matplotlib.pyplot as pltimport numpy as npimport pandas as pdfrom plottable import ColumnDefinition, ColDef, Tabled = pd.DataFrame(np.random.random((5, 5)), columns=["A", "B", "C", "D", "E"]).round(2)fig, ax = plt.subplots(figsize=(6, 5))# name表示设置哪个列的样式tab = Table(d, column_definitions=[ColumnDefinition(name="A", title="Title A"),ColumnDefinition(name="D", width=2)])plt.show()
