manim边学边做--Table
表格是一种常见的数据展示形式,manim提供了Table模块专门用于显示表格形式的数据。
表格Table和上一节介绍的矩阵Matrix都是用来显示二维数据的,
不过,Table的表现力更强,比如,它可以显示表头信息,列名信息等等。
Table模块也细分了多个对象:
- 通用
Table:显示任何内容 DecimalTable:表格内容为数字IntegerTable:表格内容为整数MathTable:表格内容是公式MobjectTable:表格内容是图形
其中,DecimalTable,IntegerTable,MathTable和MobjectTable都是继承自Table的。
本篇重点介绍Table对象,其他对象是Table的一个特例。
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_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,
)

其中列的标签就是学生姓名,行的标签是科目名称。
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,
},
)

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,
},
)

3.4. 表格背景
表格的背景默认是透明的,有两个参数add_background_rectangles_to_entries和include_background_rectangle,
可以分别设置表格元素的背景和整个表格的背景。
# 保留表格元素背景
Table(
data,
add_background_rectangles_to_entries=True,
)
# 保留整个表格背景
Table(
data,
include_background_rectangle=True,
)

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

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

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

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

4. 附件
文中完整的代码放在网盘中了(table.py),
下载地址: 完整代码 (访问密码: 6872)
manim边学边做--Table的更多相关文章
- 学EE做硬件找工作不如学CS做软件,为什么会这样?
学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...
- 牛腩学Kotlin做Android应用
牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...
- php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)
php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...
- html5-3 html5标签(热点地图如何实现)(边学边做)
html5-3 html5标签(热点地图如何实现)(边学边做) 一.总结 一句话总结:热点地图用绝对定位实现. 1.自定义列表怎么弄? dl 自定义列表dt 自定义标题dd 自定义列表内容 2. ...
- 第一份开发工作,边学边做android
我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...
- 边学边做,简单的 GraphQL 实例
项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...
- LabVIEW Actor Framwork (2)________ 边学边做server&client
回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...
- 牛腩学ASP.NET CORE做博客(视频)
牛腩学习ASP.NET CORE做的项目,边学边做. 目录: 01-dotnetcore网站部署到centos7系统上(时长 2:03:16) 02-前期准备及项目搭建 (时长:0:23:35) 03 ...
- 牛腩学用MUI做手机APP
斗鱼直播间直播学习撸码,最终目标是用MUI做一个手机APP(暂定android平台,攒钱买IPHONE 7SE!!!),直播内容含整个软件APP的制作过程(含后台接口的制作,放到自己买的阿里云服务器, ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
随机推荐
- C#开发的应用升级更新服务器端工具 - 开源研究系列文章 - 个人小作品
笔者开发过一些小应用,然后这些应用就需要有升级更新的功能,但是如果每个都集成进去也行,但是就是得写死更新的代码了.于是就想写一个应用升级更新的管理器,以前看到过Github上有一个AutoUpdate ...
- Understanding Swift’s value type thread safety - 代码分析(一)
结构体并不代表线程安全,swift在此上未做保证 func testScenarioA() throws { var store: Int = 0 DispatchQueue.concurrentPe ...
- Redis数据存储和读写
今天工作群里,有小伙伴问了一个问题,从Redis获取的数据,一会是0,一会是OK. 这引起了我们对Redis数据存储和读写的疑问. 以下是整理的一些技术研究内容. 在 Redis 中,所有的数据存储都 ...
- 数据库系列16:MyISAM与InnoDB的索引对比
相关文章 数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版) 数据库系列:高并发下的数据字段变更 数据库系列:覆盖索引和规避回表 数据库系列:数据库高可用及无损扩 ...
- 2D 3D 景深 动画 阴影
2D 二维的平面空间,让元素在X轴或者Y轴进行变化 2D里面的功能函数 2D-位移 2D-旋转 2D-缩放 2D-倾斜 变形属性 transform:: 位移:transform:translate( ...
- 华擎 asrock b365m itx win7蓝牙播放音乐爆音
华擎 asrock b365m itx win7蓝牙播放音乐爆音,吱吱吱的杂音. 偶然间,系统换成WIN10后,再用蓝牙耳机听歌,则正常.机箱位置不变.
- Scrapy框架(六)--图片数据抓取
基于文件下载的管道类 在scrapy中我们之前爬取的都是基于字符串类型的数据,那么要是基于图片数据的爬取,那又该如何呢? 其实在scrapy中已经为我们封装好了一个专门基于图片请求和持久化存储的管道类 ...
- Mysql性能优化(详解)
引言 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操 ...
- 短链服务接口慢优化 redis应用
短链服务接口慢优化 redis应用 短链接服务:1.长链接 查询 短链接(长链接如果存在,直接返回短链接,如果长链接不存在,则需要生成短链接),比如:在获取短信之前,或者管理后台编辑短信内容之前,需要 ...
- 调用支付JSAPI缺少参数:total_fee解决方法
1.https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7 调用支付JSAPI缺少参数:total_fee 1.请检查预支付会话标识p ...