首页 > 其他分享 >manim边学边做--Table

manim边学边做--Table

时间:2024-07-25 10:29:24浏览次数:7  
标签:rows 表格 -- Text labels cols Table 边学边

表格是一种常见的数据展示形式,manim提供了Table模块专门用于显示表格形式的数据。
表格Table和上一节介绍的矩阵Matrix都是用来显示二维数据的,
不过,Table的表现力更强,比如,它可以显示表头信息,列名信息等等。

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

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

其中,DecimalTableIntegerTableMathTableMobjectTable都是继承自Table的。
本篇重点介绍Table对象,其他对象是Table的一个特例。
image.png
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. 内容对齐方向

表格中的内容默认是居中对齐的,可以通过参数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. 表格边框

默认表格是没有外边框的,通过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. 表格背景

表格的背景默认是透明的,有两个参数add_background_rectangles_to_entriesinclude_background_rectangle
可以分别设置表格元素的背景和整个表格的背景。

# 保留表格元素背景
Table(
    data,
    add_background_rectangles_to_entries=True,
)

# 保留整个表格背景
Table(
    data,
    include_background_rectangle=True,
)

out.gif

3.5. 定制左上角元素

表格在设置了行列名称之后,就会多出一个左上角位置,这个位置默认是空的。
可以在表格的左上角填充任意的内容,包括数学公式和图形。

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. 行列操作

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

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. 单元格操作

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

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. 边框操作

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

文中完整的代码放在网盘中了(table.py),
下载地址: 完整代码 (访问密码: 6872)

标签:rows,表格,--,Text,labels,cols,Table,边学边
From: https://www.cnblogs.com/wang_yb/p/18322456

相关文章

  • 2844. 生成特殊数字的最少操作 Medium
    给你一个下标从 0 开始的字符串 num ,表示一个非负整数。在一次操作中,您可以选择 num 的任意一位数字并将其删除。请注意,如果你删除 num 中的所有数字,则 num 变为 0。返回最少需要多少次操作可以使 num 变成特殊数字。如果整数 x 能被 25 整除,则该整数 x ......
  • 贝叶斯分析与决策理论:用于确定分类问题决策点的应用
    在分类问题中,一个常见的难题是决定输出为数字时各类别之间的切分点。例如,一个神经网络的输出是介于0到1之间的数字,比如0.7,这是对应于正类(1)还是负类(0)?常识告诉我们使用0.5作为决策标记,但如果低估正类的风险较高怎么办?或者如果类别不平衡呢?在这些情况下,正确估计切分点需要复审概率......
  • openfeign及熔断的使用以及传参方式的误区
    pom文件<!--熔断依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><!--引......
  • DolphinPHP1.5.1版本的RCE
    侵权声明本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。如果您是版权持有人,并且认为您的作品被侵犯,请通过以下方式与我们联系:[[email protected]]。我们将在确......
  • Java————链表
    目录前言:1.链表的概念2.链表的结构2.1带头的和不带头的2.2单向和双向2.3循环和非循环3.链表的实现3.1双向不带头不循环链表:3.2单向不带头不循环链表:4.LinkedList的使用4.1什么是LinkedList4.2LinkedList的使用5.LinkedList的遍历5.1foreach遍历5.2使用迭代器遍......
  • 管理无人值守设备,看ToDesk企业版
    随着科技的持续发展和自动化技术的深入应用,无人值守作为一种高效的远程管理方式,正逐渐受到众多企业的青睐。该技术依托于设备的自动化运行和远程虚拟服务,成功实现了少人化、无现金化的智慧管理模式,从而助力企业提升运营效率,降低成本。然而,在无人值守的背景下,如何高效地进行设备的......
  • SS928&3403K开发环境搭建(二)
    1.序    在前一篇“SS928&3403K开发环境搭建(一)”中已经借助Ebaina搭建好的ubuntu对开发板做了测试,这篇记录从零开始搭建SS928&3403K的开发环境;2.开发前准备        下载VMware®Workstation16Pro16.1.0版本    下载ubuntu18.04开发镜像文件,我......
  • 都4202年了为什么大厂程序员还在用java8?
    Java8新特性文章目录Java8新特性接口的默认方法(DefaultMethodsforInterfaces)Lambda表达式(Lambdaexpressions)函数式接口(FunctionalInterfaces)方法和构造函数引用(MethodandConstructorReferences)Lambda表达式作用域(LambdaScopes)访问局部变量访问字......
  • Windows下cmake入门教程-利用cmake创建Visual Studio工程
    希望我们不仅把编程当成一份工作,更要将其当成一份热爱!!!                                                                 -----潜意......
  • 连锁餐饮店如何快速实现低成本联网
    随着大众消费观念的转变、经济下行等诸多原因,消费降级让消费市场呈现低迷现状,尤其是餐饮行业,今年亏本经营甚至歇业闭店的门店数不胜数。为了应对营收降低的现状,提高门店持续经营的竞争力,降成本将是每个商家都关注的重点之一。网络作为餐饮店运营的重要基础设施,降低网络成本可作......