翼度科技»论坛 编程开发 python 查看内容

manim边学边做--Table

6

主题

6

帖子

18

积分

新手上路

Rank: 1

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

  • 通用Table:显示任何内容
  • DecimalTable:表格内容为数字
  • IntegerTable:表格内容为整数
  • MathTable:表格内容是公式
  • MobjectTable:表格内容是图形
其中,DecimalTable,IntegerTable,MathTable和MobjectTable都是继承自Table的。
本篇重点介绍Table对象,其他对象是Table的一个特例。

Table系列在manim各个模块中的位置大致如上图中所示。
1. 主要参数

主要参数包括:
参数名称类型说明tablelist
    表格中显示的数据row_labelslist[VMobject]行标签,相当于表格的第一列col_labelslist[VMobject]列标签,相当于列名,表格的第一行top_left_entryVMobject表格左上角显示的内容v_bufffloat表格元素行间距h_bufffloat表格元素列间距include_outer_linesbool是否显示表格外边框add_background_rectangles_to_entriesbool表格背景色是否加到表格元素上entries_background_colormanim color表格元素的背景色include_background_rectanglebool是否添加表格背景色background_rectangle_colormanim color表格的背景色arrange_in_grid_configdict表格对齐方向的配置line_configdict表格线条的配置总的来看,参数主要用于设置表格行列,表格背景,线条等相关的样式。
    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添加行列信息的说明。
    1. data = [
    2.     ["90", "100", "60"],
    3.     ["66", "78", "83"],
    4. ]
    5. # 默认的表格
    6. Table(data)
    7. cols = [
    8.     Text("小红"),
    9.     Text("小华"),
    10.     Text("小明"),
    11. ]
    12. rows = [Text("语文"), Text("数学")]
    13. # 带有行列标签的表格
    14. Table(
    15.     data,
    16.     col_labels=cols,
    17.     row_labels=rows,
    18. )
    复制代码

    其中列的标签就是学生姓名,行的标签是科目名称。
    3.2. 内容对齐方向

    表格中的内容默认是居中对齐的,可以通过参数arrange_in_grid_config来调整其对齐方向。
    1. # 左对齐
    2. Table(
    3.     data,
    4.     arrange_in_grid_config={
    5.         "cell_alignment": LEFT,
    6.     },
    7. )
    8. # 右对齐
    9. t = Table(
    10.     data,
    11.     arrange_in_grid_config={
    12.         "cell_alignment": RIGHT,
    13.     },
    14. )
    复制代码

    3.3. 表格边框

    默认表格是没有外边框的,通过include_outer_lines参数加上外边框,
    此外,line_config参数还可以设置边框的粗细和颜色。
    1. # 外边框
    2. Table(
    3.     data,
    4.     include_outer_lines=True,
    5. )
    6. # 边框颜色和粗细
    7. Table(
    8.     data,
    9.     include_outer_lines=True,
    10.     line_config={
    11.         "stroke_width": 1,
    12.         "color": GREEN,
    13.     },
    14. )
    复制代码

    3.4. 表格背景

    表格的背景默认是透明的,有两个参数add_background_rectangles_to_entries和include_background_rectangle,
    可以分别设置表格元素的背景和整个表格的背景。
    1. # 保留表格元素背景
    2. Table(
    3.     data,
    4.     add_background_rectangles_to_entries=True,
    5. )
    6. # 保留整个表格背景
    7. Table(
    8.     data,
    9.     include_background_rectangle=True,
    10. )
    复制代码

    3.5. 定制左上角元素

    表格在设置了行列名称之后,就会多出一个左上角位置,这个位置默认是空的。
    可以在表格的左上角填充任意的内容,包括数学公式和图形。
    1. cols = [
    2.     Text("小红"),
    3.     Text("小华"),
    4.     Text("小明"),
    5. ]
    6. rows = [Text("语文"), Text("数学")]
    7. # 左上角默认为空
    8. Table(
    9.     data,
    10.     row_labels=rows,
    11.     col_labels=cols,
    12. )
    13. # 左上角填入公式
    14. mt = MathTex("y=\sum x_i", color=RED)
    15. t = Table(
    16.     data,
    17.     row_labels=rows,
    18.     col_labels=cols,
    19.     top_left_entry=mt,
    20. )
    21. # 左上角填入图形
    22. star = Star(color=RED).scale(0.5)
    23. Table(
    24.     data,
    25.     row_labels=rows,
    26.     col_labels=cols,
    27.     top_left_entry=star,
    28. )
    复制代码

    3.6. 行列操作

    通过行列操作方法,可以获取行列对象,添加更多定制化的操作。
    1. cols = [
    2.     Text("小红"),
    3.     Text("小华"),
    4.     Text("小明"),
    5. ]
    6. rows = [Text("语文"), Text("数学")]
    7. # 按行 设置颜色
    8. t = Table(
    9.     data,
    10.     row_labels=rows,
    11.     col_labels=cols,
    12. )
    13. t.animate.set_row_colors(
    14.     BLUE, RED, YELLOW
    15. )
    16. # 按列 设置颜色
    17. t = Table(
    18.     data,
    19.     row_labels=rows,
    20.     col_labels=cols,
    21. )
    22. t.animate.set_column_colors(
    23.     BLUE, RED, YELLOW, GREEN
    24. )
    25. # 获取行对象
    26. t = Table(
    27.     data,
    28.     row_labels=rows,
    29.     col_labels=cols,
    30. )
    31. rows = t.get_rows()
    32. t.add(SurroundingRectangle(rows[1]))
    33. # 获取列对象
    34. t = Table(
    35.     data,
    36.     row_labels=rows,
    37.     col_labels=cols,
    38. )
    39. cols = t.get_columns()
    40. t.add(SurroundingRectangle(cols[1]))
    41. t.add(SurroundingRectangle(cols[3]))
    复制代码

    3.7. 单元格操作

    单元格操作是比行列操作更加细致表格操作。
    1. cols = [
    2.     Text("小红"),
    3.     Text("小华"),
    4.     Text("小明"),
    5. ]
    6. rows = [Text("语文"), Text("数学")]
    7. # 单元格颜色
    8. t = Table(
    9.     data,
    10.     include_outer_lines=True,
    11.     row_labels=rows,
    12.     col_labels=cols,
    13. )
    14. cell1 = t.get_cell(pos=(2, 2))
    15. cell2 = t.get_cell(pos=(3, 4))
    16. cell1.set_color(RED)
    17. cell2.set_color(BLUE)
    18. t.add(cell1, cell2)
    19. # 高亮 单元格
    20. t = Table(
    21.     data,
    22.     include_outer_lines=True,
    23.     row_labels=rows,
    24.     col_labels=cols,
    25. )
    26. self.play(Create(t), run_time=run_time)
    27. t.add_highlighted_cell(
    28.     pos=(2, 2),
    29.     color=GREEN,
    30. )
    31. t.add_highlighted_cell(
    32.     pos=(3, 4),
    33.     color=YELLOW,
    34. )
    复制代码

    3.8. 边框操作

    最后,还可以对表格的边框进行定制,get_horizontal_lines和get_vertical_lines方法为我们提供了获取表格横线和纵线对象的方法。
    1. cols = [
    2.     Text("小红"),
    3.     Text("小华"),
    4.     Text("小明"),
    5. ]
    6. rows = [Text("语文"), Text("数学")]
    7. # 设置横线的颜色
    8. t = Table(
    9.     data,
    10.     row_labels=rows,
    11.     col_labels=cols,
    12. )
    13. lines = t.get_horizontal_lines()
    14. lines[0].set_color(RED)
    15. lines[1].set_color(BLUE)
    16. # 设置纵线的颜色
    17. t = Table(
    18.     data,
    19.     row_labels=rows,
    20.     col_labels=cols,
    21. )
    22. lines = t.get_vertical_lines()
    23. lines[0].set_color(RED)
    24. lines[1].set_color(BLUE)
    25. lines[2].set_color(YELLOW)
    复制代码

    4. 附件

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

    来源:https://www.cnblogs.com/wang_yb/p/18322456
    免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具