表格是一种常见的数据展示形式,manim
提供了Table
模块专门用于显示表格形式的数据。
表格Table
和上一节介绍的矩阵Matrix
都是用来显示二维数据的,
不过,Table
的表现力更强,比如,它可以显示表头信息,列名信息等等。
Table
模块也细分了多个对象:
Table
:显示任何内容DecimalTable
:表格内容为数字IntegerTable
:表格内容为整数MathTable
:表格内容是公式MobjectTable
:表格内容是图形其中,DecimalTable
,IntegerTable
,MathTable
和MobjectTable
都是继承自Table
的。
本篇重点介绍Table
对象,其他对象是Table
的一个特例。Table
系列在manim
各个模块中的位置大致如上图中所示。
主要参数包括:
参数名称 | 类型 | 说明 |
---|---|---|
table | list[list] | 表格中显示的数据 |
row_labels | list[VMobject] | 行标签,相当于表格的第一列 |
col_labels | list[VMobject] | 列标签,相当于列名,表格的第一行 |
top_left_entry | VMobject | 表格左上角显示的内容 |
v_buff | float | 表格元素行间距 |
h_buff | float | 表格元素列间距 |
include_outer_lines | bool | 是否显示表格外边框 |
add_background_rectangles_to_entries | bool | 表格背景色是否加到表格元素上 |
entries_background_color | manim color | 表格元素的背景色 |
include_background_rectangle | bool | 是否添加表格背景色 |
background_rectangle_color | manim color | 表格的背景色 |
arrange_in_grid_config | dict | 表格对齐方向的配置 |
line_config | dict | 表格线条的配置 |
总的来看,参数主要用于设置表格行列,表格背景,线条等相关的样式。
参数一般是初始化表格时使用,而方法则是用来动态的改变表格的内容和样式。
下面罗列了一些常用的方法:
名称 | 说明 |
---|---|
add_background_to_entries | 给表格元素添加背景 |
add_highlighted_cell | 高亮某个单元格 |
get_rows | 获取所有行对象 |
get_columns | 获取所有列对象 |
get_cell | 获取单元格 |
get_row_labels | 获取行的标签 |
get_col_labels | 获取列的标签 |
get_horizontal_lines | 获取表格的横线 |
get_vertical_lines | 获取表格的纵线 |
scale | 缩放表格 |
set_row_colors | 设置行颜色 |
set_column_colors | 设置列颜色 |
get_highlighted_cell | 获取高亮的单元格 |
下面通过示例演示常用的参数和方法。
表格Table
是默认像矩阵Matrix
一样,只显示数据,不过,与之不同的是,
表格可以通过属性rows_labels
和col_labels
添加行列信息的说明。
data = [
["90", "100", "60"],
["66", "78", "83"],
]
# 默认的表格
Table(data)
cols = [
Text("小红"),
Text("小华"),
Text("小明"),
]
rows = [Text("语文"), Text("数学")]
# 带有行列标签的表格
Table(
data,
col_labels=cols,
row_labels=rows,
)
其中列的标签就是学生姓名,行的标签是科目名称。
表格中的内容默认是居中对齐的,可以通过参数arrange_in_grid_config
来调整其对齐方向。
# 左对齐
Table(
data,
arrange_in_grid_config={
"cell_alignment": LEFT,
},
)
# 右对齐
t = Table(
data,
arrange_in_grid_config={
"cell_alignment": RIGHT,
},
)
默认表格是没有外边框的,通过include_outer_lines
参数加上外边框,
此外,line_config参数还可以设置边框的粗细和颜色。
# 外边框
Table(
data,
include_outer_lines=True,
)
# 边框颜色和粗细
Table(
data,
include_outer_lines=True,
line_config={
"stroke_width": 1,
"color": GREEN,
},
)
表格的背景默认是透明的,有两个参数add_background_rectangles_to_entries
和include_background_rectangle
,
可以分别设置表格元素的背景和整个表格的背景。
# 保留表格元素背景
Table(
data,
add_background_rectangles_to_entries=True,
)
# 保留整个表格背景
Table(
data,
include_background_rectangle=True,
)
表格在设置了行列名称之后,就会多出一个左上角位置,这个位置默认是空的。
可以在表格的左上角填充任意的内容,包括数学公式和图形。
cols = [
Text("小红"),
Text("小华"),
Text("小明"),
]
rows = [Text("语文"), Text("数学")]
# 左上角默认为空
Table(
data,
row_labels=rows,
col_labels=cols,
)
# 左上角填入公式
mt = MathTex("y=\sum x_i", color=RED)
t = Table(
data,
row_labels=rows,
col_labels=cols,
top_left_entry=mt,
)
# 左上角填入图形
star = Star(color=RED).scale(0.5)
Table(
data,
row_labels=rows,
col_labels=cols,
top_left_entry=star,
)
通过行列操作方法,可以获取行列对象,添加更多定制化的操作。
cols = [
Text("小红"),
Text("小华"),
Text("小明"),
]
rows = [Text("语文"), Text("数学")]
# 按行 设置颜色
t = Table(
data,
row_labels=rows,
col_labels=cols,
)
t.animate.set_row_colors(
BLUE, RED, YELLOW
)
# 按列 设置颜色
t = Table(
data,
row_labels=rows,
col_labels=cols,
)
t.animate.set_column_colors(
BLUE, RED, YELLOW, GREEN
)
# 获取行对象
t = Table(
data,
row_labels=rows,
col_labels=cols,
)
rows = t.get_rows()
t.add(SurroundingRectangle(rows[1]))
# 获取列对象
t = Table(
data,
row_labels=rows,
col_labels=cols,
)
cols = t.get_columns()
t.add(SurroundingRectangle(cols[1]))
t.add(SurroundingRectangle(cols[3]))
单元格操作是比行列操作更加细致表格操作。
cols = [
Text("小红"),
Text("小华"),
Text("小明"),
]
rows = [Text("语文"), Text("数学")]
# 单元格颜色
t = Table(
data,
include_outer_lines=True,
row_labels=rows,
col_labels=cols,
)
cell1 = t.get_cell(pos=(2, 2))
cell2 = t.get_cell(pos=(3, 4))
cell1.set_color(RED)
cell2.set_color(BLUE)
t.add(cell1, cell2)
# 高亮 单元格
t = Table(
data,
include_outer_lines=True,
row_labels=rows,
col_labels=cols,
)
self.play(Create(t), run_time=run_time)
t.add_highlighted_cell(
pos=(2, 2),
color=GREEN,
)
t.add_highlighted_cell(
pos=(3, 4),
color=YELLOW,
)
最后,还可以对表格的边框进行定制,get_horizontal_lines
和get_vertical_lines
方法为我们提供了获取表格横线和纵线对象的方法。
cols = [
Text("小红"),
Text("小华"),
Text("小明"),
]
rows = [Text("语文"), Text("数学")]
# 设置横线的颜色
t = Table(
data,
row_labels=rows,
col_labels=cols,
)
lines = t.get_horizontal_lines()
lines[0].set_color(RED)
lines[1].set_color(BLUE)
# 设置纵线的颜色
t = Table(
data,
row_labels=rows,
col_labels=cols,
)
lines = t.get_vertical_lines()
lines[0].set_color(RED)
lines[1].set_color(BLUE)
lines[2].set_color(YELLOW)
文中完整的代码放在网盘中了(table.py
),
下载地址: 完整代码 (访问密码: 6872)