manim边学边做--Table

cnblogs 2024-07-25 10:39:00 阅读 75

表格是一种常见的数据展示形式,<code>manim提供了Table模块专门用于显示表格形式的数据。

表格Table和上一节介绍的矩阵Matrix都是用来显示二维数据的,

不过,Table的表现力更强,比如,它可以显示表头信息,列名信息等等。

Table模块也细分了多个对象:

    <li>通用Table:显示任何内容
  • DecimalTable:表格内容为数字
  • IntegerTable:表格内容为整数
  • MathTable:表格内容是公式
  • MobjectTable:表格内容是图形

其中,DecimalTableIntegerTableMathTableMobjectTable都是继承自Table的。

本篇重点介绍Table对象,其他对象是Table的一个特例。

image.png

<code>Table系列在manim各个模块中的位置大致如上图中所示。

1. 主要参数

主要参数包括:

参数名称 类型 说明
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 表格线条的配置

总的来看,参数主要用于设置表格行列,表格背景,线条等相关的样式。

2. 主要方法

参数一般是初始化表格时使用,而方法则是用来动态的改变表格的内容和样式。

下面罗列了一些常用的方法:

名称 说明
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 获取高亮的单元格

3. 使用示例

下面通过示例演示常用的参数和方法。

3.1. 行列标签

表格Table是默认像矩阵Matrix一样,只显示数据,不过,与之不同的是,

表格可以通过属性rows_labelscol_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,

)

out.gif

其中列的标签就是学生姓名,行的标签是科目名称。

3.2. 内容对齐方向

表格中的内容默认是居中对齐的,可以通过参数<code>arrange_in_grid_config来调整其对齐方向。

# 左对齐

Table(

data,

arrange_in_grid_config={

"cell_alignment": LEFT,

},

)

# 右对齐

t = Table(

data,

arrange_in_grid_config={

"cell_alignment": RIGHT,

},

)

out.gif

3.3. 表格边框

默认表格是没有外边框的,通过<code>include_outer_lines参数加上外边框,

此外,line_config参数还可以设置边框的粗细和颜色。

# 外边框

Table(

data,

include_outer_lines=True,

)

# 边框颜色和粗细

Table(

data,

include_outer_lines=True,

line_config={

"stroke_width": 1,

"color": GREEN,

},

)

out.gif

3.4. 表格背景

表格的背景默认是透明的,有两个参数<code>add_background_rectangles_to_entries和include_background_rectangle

可以分别设置表格元素的背景和整个表格的背景。

# 保留表格元素背景

Table(

data,

add_background_rectangles_to_entries=True,

)

# 保留整个表格背景

Table(

data,

include_background_rectangle=True,

)

out.gif

3.5. 定制左上角元素

表格在设置了行列名称之后,就会多出一个左上角位置,这个位置默认是空的。

可以在表格的左上角填充任意的内容,包括数学公式和图形。

<code>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,

)

out.gif

3.6. 行列操作

通过行列操作方法,可以获取行列对象,添加更多定制化的操作。

<code>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]))

out.gif

3.7. 单元格操作

单元格操作是比行列操作更加细致表格操作。

<code>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,

)

out.gif

3.8. 边框操作

最后,还可以对表格的边框进行定制,<code>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)

out.gif

4. 附件

文中完整的代码放在网盘中了(<code>table.py),

下载地址: 完整代码 (访问密码: 6872)



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。