首页 > Python资料 博客日记
manim边学边做--无向图
2024-10-10 12:00:05Python资料围观28次
无向图属于数学中的图论这一学科,
所谓无向图G
,就是由顶点集V
(非空集合)和边集E
(由V中元素构成的无序二元组的集合)组成的图,
可表示为G=(V,E)
。
在无向图中,边没有方向,即从顶点A到顶点B的边与从顶点B到顶点A的边是相同的。
无向图简洁直观,常用于描述社交网络,交通网络以及电子电路等等。
在社交网络中,用户可以被视为顶点,而用户之间的关系则可以被视为边。
因为好友关系通常是双向的,没有明确的方向性,非常适合用无向图来表示。
在城市交通规划中,可以将各个路口或交通节点视为顶点,而将路口之间的道路或交通线路视为边。
因为道路通常是双向通行的,所以也适合用无向图来表示。
在电子电路设计中,可以将各个电子元件(如电阻、电容、电感等)视为顶点,而将元件之间的连接关系(如导线连接)视为边。
无向图可以表示这种电路结构,因为电路中的电流和信号通常是双向传输的。
下面介绍manim
中绘制无向图的对象Graph
。
1. 主要参数
无向图对象Graph
主要参数有:
参数名称 | 类型 | 说明 |
---|---|---|
vertices | list | 图的顶点列表 |
edges | list | 图的边列表,每个边 |
labels | dict | 顶点是否显示标签文本 |
label_fill_color | str | 标签的背景色 |
layout | str | 图中定点的布局方式 |
layout_config | dict | 配置如何布局图中各个顶点 |
layout_scale | float | 图各个顶点布局的比例 |
vertex_type | Mobject | 顶点的类型,不一定是点,也可以是manim中其他的对象 |
vertex_config | dict | 顶点相关的配置 |
vertex_mobjects | dict | 一系列的顶点对象 |
edge_type | Mobject | 边的类型,不一定是线,也可以是manim中其他的对象 |
edge_config | dict | 边相关的配置 |
paritions | list | |
root_vertex | dict |
这些参数中,vertices
和edges
相关的参数(比如xxx_type,xxx_config)比较好理解。
labels
参数设置是否需要显示顶点的标签,默认是把vertices
的数值作为标签的内容。
layout
参数内置了多种现成的布局方式:
'circular',
'kamada_kawai'
'partite'
'planar'
'random'
'shell'
'spectral'
'spiral'
'spring'
'tree'
layout_config
参数可以对上面现成布局方式的进行微调。
最后两个参数paritions
和root_vertex
比较特殊,
paritions
只能在layout
设置为'partite'
时使用,用来生成层状的图(比如描述神经网络的图),
paritions
用来设置每一层包含哪些顶点;
root_vertex
只能在layout
设置为'tree'
时使用,用来树状图,
root_vertex
用来设置树的根节点。
后面的示例会演示如何使用paritions
和root_vertex
来生成层状和树状的无向图。
2. 主要方法
无向图Graph
的方法主要用来动态改变无向图,比如添加或删除顶点和边。
名称 | 说明 |
---|---|
add_edges | 增加无向图的边 |
add_vertices | 增加无向图的顶点 |
remove_edges | 删除无向图的边 |
remove_vertices | 删除无向图的顶点 |
change_layout | 动态改表无向图的结构 |
from_networkx | 从networkx 来生成无向图 |
networkx
是另一个常用的Python
库,用于创建、操作和研究复杂网络的结构。
Graph
对象可以直接根据networkx
的对象生成图。
3. 使用示例
下面通过示例了解Graph
对象的使用。
3.1. 顶点的配置
顶点默认是Dot
对象,可以设置其大小和颜色,也可以添加标签,也就是在顶点中显示文字。
更进一步,设置可以改变顶点的形状,使用manim
中的其他几何对象来作为图的顶点。
# 不同颜色的设置
graph = Graph(
vertex_config={
0: {"color": RED},
# ...
},
)
# 顶点显示标签
graph = Graph(
labels=True,
)
# 星形顶点
graph = Graph(
vertex_config={"outer_radius": 0.15},
vertex_type=Star,
)
3.2. 边的配置
无向图的边也和顶点一样,可以设置颜色,粗细等属性,此外还可以将默认的直线改成虚线。
# 边的颜色
graph = Graph(
edge_config={
(0, 1): {"color": RED},
# ...
},
)
# 边的粗细
graph = Graph(
edge_config={
(0, 1): {"stroke_width": 1},
# ...
},
)
# 虚线
graph = Graph(
edge_type=DashedLine,
)
3.3. 内置的layout
上面的示例中,我们只能控制无向图的顶点和边的数量,而无法控制它的形状和布局,
manim
为我们内置了多种不同的布局方式,直接使用这些内置的布局方式可以节约很多时间。
for layout in [
"spring",
"circular",
"kamada_kawai",
"planar",
"random",
"shell",
"spectral",
"spiral",
]:
graph = Graph(
layout=layout,
)
3.4. 层状图
层状图的布局需要配合参数partitions
一起使用,partitions
中决定每一层中有哪些顶点。
神经网络的结构图就是一个典型的层状图。
下面的示例中,通过partitions
参数中定义了4个层。
partitions = [[0, 1], [2, 3, 4], [5, 6], [7, 8]]
graph = Graph(
layout="partite",
partitions=partitions,
)
3.5. 树状图
树状图的布局需要配合参数root_vertex
一起使用,root_vertex
定义了树的根顶点是哪个。
下面的示例中,先设置root_vertex
为顶点0
,再把root_vertex
改为顶点2
。
# 初始的树
graph = Graph(
layout="tree",
root_vertex=0,
)
# 修改根节点
graph2 = Graph(
layout="tree",
root_vertex=2,
)
4. 附件
文中完整的代码放在网盘中了(graph.py
),
下载地址: 完整代码 (访问密码: 6872)
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj