概述
以下是 maplotlib 库中的继承图:
Cell 类继承自 Rectangle 类,其实一个 Cell 类就是一个 Rectangle 类加上特定的文本。一般情况下不会从 Cell 类创建实例,而是作为 plt.table()
创建的 Table 对象的单元格存在。
Cell 类的定义如下:
class Cell(Rectangle):
def __init__(self, xy, width, height,
edgecolor='k', facecolor='w',
fill=True,
text='',
loc=None,
fontproperties=None,
*,
visible_edges='closed',
):
super().__init__(xy, width=width, height=height, fill=fill,
edgecolor=edgecolor, facecolor=facecolor)
参数说明:
- Xy:指定 Cell 对象左下角的位置;
- Width:指定单元格宽度;
- Height:指定单元格高度;
- Edgecolor:指定单元格边缘颜色,默认黑色;
- Facecolor:指定单元格背景颜色,默认白色;
- Fill:指定是否使用背景颜色进行填充,默认是 True;
- Text:指定单元格文本, 默认空字符串;
- Loc:指定单元格文本对齐方式,默认右对齐;
- fontproperties:指定字体字典;
- visible_edges:指定单元格边缘线的绘制模式,默认 closed 绘制所有的边缘;
从 Cell 类的初始化可以看出除了文本之外都会将参数委托给父类 Rectangle 进行初始化,印证了 Cell 类就是一个 Rectangle 类加上特定的文本这句话,还有这里构建 Cell 实例的时候无法传递 Patch 类的相关参数。
示例
一般情况下我们都是通过 plt.table()
创建 【Table】 对象并将它添加到画布中的,我们先以一个简单的示例来演示一下 Cell 对象应用,完整代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.figure()
ax = plt.gca()
y = np.random.randn(9)
col_labels = ['col1', 'col2', 'col3']
row_labels = ['row1', 'row2', 'row3']
table_vals = [[1, 12, 13],
[22, 21, 23],
[28, 29, 30]]
row_colors = ['red', 'green', 'gold']
my_table = plt.table(cellText=table_vals,
cellLoc='center',
colWidths=[0.1] * 3,
rowLabels=row_labels,
colLabels=col_labels,
rowColours=row_colors,
loc='upper right')
plt.plot(y)
plt.show()
画图效果如下:
上面图中的表格可以看做是多个 Cell 对象的组合,cellText
参数制定了数据单元格的 text
属性;cellText 指定了行标签的 text
属性; colLabels
参数指定了列标签的 text
属性;colWidths=[0.1] * 3
指定了每一列单元格的 width
属性;cellLoc
参数则指定了 Cell 对象文本的对齐方式。经过上面的分析可以看出 plt.table()
就是一种快速创建多个二维 Cell 对象的方法,这也是我们最常用的一种方式。
现在我们更改一下 cellLoc='left'
参数,看看会发生什么?可以看到数据表格已经变成左对齐了。
最后我们再来看一个示例,Patch 类中有一个属性 hatch
,它可以指定块内部填充样式,如果我们创建 Cell 对象的时候传递该属性会发生什么呢?
cell = Cell((30, 30), 30, 30, hatch='*')
TypeError: __init__() got an unexpected keyword argument 'hatch'
文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,相关的知识点也可进行分享,希望大家都能有所收获!!如果觉得我的文章写得还行,不妨支持一下。你的每一个转发、关注、点赞、评论都是对我最大的支持!