manim边做边学--有向图

简介: manim边做边学--有向图

合集 - manim(41)
1.
【manim动画教程】-- 安装
2023-03-28
2.
【manim动画教程】-- 基本图形
2023-03-29
3.
【manim动画教程】-- 坐标系
2023-04-10
4.
【manim动画教程】-- 文本样式
2023-04-07
5.
【manim动画教程】-- 文字和公式
2023-04-04
6.
【manim动画教程】-- 图形样式
2023-03-31
7.
【manim动画教程】--相机
2023-04-19
8.
【manim动画教程】--高级动画效果
2023-04-14
9.
【manim动画教程】--常用动画效果
2023-04-12
10.
【manim】之滚动字幕
2022-12-06
11.
【manim】之圆规动画
2023-01-31
12.
【manim】之目录动画
2023-02-28
13.
manim边学边做--DecimalNumber
06-12
14.
manim边学边做--Integer
06-13
15.
manim边学边做--Variable
06-14
16.
manim边学边做--Title
06-20
17.
manim边学边做--BulletedList
06-21
18.
manim边学边做--SingleStringMathTex
06-23
19.
manim边学边做--MathTex
06-28
20.
manim边学边做--Tex
07-01
21.
manim边学边做--Text
07-04
22.
manim边学边做--Paragraph
07-09
23.
manim边学边做--MarkupText
07-10
24.
manim边学边做--Code
07-16
25.
manim边学边做--Matrix
07-17
26.
manim边学边做--Table
07-25
27.
manim边学边做--点
08-09
28.
manim边学边做--圆形类
08-15
29.
manim边学边做--圆弧形
08-20
30.
manim边学边做--直线类
08-22
31.
manim边学边做--带箭头直线
09-02
32.
manim边学边做--曲线类
09-04
33.
manim边学边做--角度标记
09-07
34.
manim边学边做--常用多边形
09-10
35.
manim边学边做--通用多边形
09-13
36.
manim边学边做--弧形多边形
09-15
37.
manim边学边做--空心多边形
09-21
38.
manim边学边做--图形间集合关系
09-27
39.
manim边学边做--形状匹配
10-01
40.
manim边学边做--无向图
10-10
41.
manim边做边学--有向图
10-12
收起
有向图和上一篇介绍的无向图基本一样,唯一的区别在于有向图的边有方向性,它表示的是顶点之间的单向或依赖关系。

有向图G一般表示为:G=。和无向图一样,V是顶点集合,E是边的集合。

不同之处在于,无向图是用小括号(V,E),有向图用尖括号。

在有向图中,边是有方向的,所以,从顶点A到顶点B的边与从顶点B到顶点A的边是不同的。

与无向图一样,有向图也有很多应用场景,比如:
[kod.fan-team.com)
[kod.fa396.com)
[kod.fanliyes.com)
[kod.fanqie2004.com)
[kod.fuchan91.com)

在地图导航中,有向图常被用来表示道路网络。

节点代表地点(如交叉路口、城市等),有向边代表道路,边的权重可以表示道路的长度、行驶时间或交通状况等。

在供应链管理中,有向图可以用来表示货物的流动路径。

节点代表供应链中的各个环节(如供应商、制造商、分销商等),边代表货物流动的路径,边的容量可以表示货物的承载能力。

在社会网络中,上一篇提到可以用无向图表示用户之间的好友关系。

而有向图同样可以用在社会网络分析,它可以用来表示用户之间的关注关系,转发关系等,用于分析用户的行为模式。

下面介绍manim中绘制有向图的对象DiGraph。

  1. 主要参数
    有向图对象DiGraph主要参数和无向图类似:

参数名称 类型 说明
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来生成层状和树状的有向图。

  1. 主要方法
    有向图DiGraph的方法主要用来动态改变有向图,比如添加或删除顶点和边。

名称 说明
add_edges 增加有向图的边
add_vertices 增加有向图的顶点
remove_edges 删除有向图的边
remove_vertices 删除有向图的顶点
change_layout 动态改表有向图的结构
from_networkx 从networkx来生成有向图
networkx是另一个常用的Python库,用于创建、操作和研究复杂网络的结构。

DiGraph对象也可以直接根据networkx的对象生成图。

  1. 使用示例
    下面的示例和上一篇无向图的示例类似,只是改用有向图DiGraph对象来实现。

3.1. 顶点的配置
顶点的设置和无向图几乎是一样的。

不同颜色的设置

graph = DiGraph(
vertex_config={
0: {"color": RED},

    # ...
},

)

顶点显示标签

graph = DiGraph(
labels=True,
)

星形顶点

graph = DiGraph(
vertex_config={"outer_radius": 0.15},
vertex_type=Star,
)

3.2. 边的配置
有向图的边也和顶点一样,可以设置颜色,粗细等属性,

与无向图不同之处在于:有向图的边可以设置箭头的样式。

边的颜色

graph = DiGraph(
edge_config={
(0, 1): {"color": RED},

    # ...
},

)

边的粗细

graph = DiGraph(
edge_config={
(0, 1): {"stroke_width": 1},

    # ...
},

)

不同箭头的边

graph = DiGraph(
edge_config={
(0, 1): {
"tip_config": {
"tip_shape": ArrowCircleTip,
},
},
(0, 2): {
"tip_config": {
"tip_shape": ArrowTriangleTip,
},
},

    # ...
},

)

3.3. 内置的layout
有向图中内置的layout和上一篇无向图中介绍的是一样的。

for layout in [
"spring",
"circular",
"kamada_kawai",
"planar",
"random",
"shell",
"spectral",
"spiral",
]:
graph = DiGraph(
layout=layout,
)

3.4. 层状图
层状图的布局需要配合参数partitions一起使用,partitions中决定每一层中有哪些顶点。

有向图的边有方向,绘制出来更像神经网络的结构。

partitions = [[0, 1], [2, 3, 4], [5, 6], [7, 8]]
graph = DiGraph(
layout="partite",
partitions=partitions,
)

3.5. 树状图
树状图的布局需要配合参数root_vertex一起使用,root_vertex定义了树的根顶点是哪个。

这里与无向图有个不同的地方,绘制有向的树状图时,顶点和边的顺序很重要,需要从根节点开始,依次传入各个顶点。

下面示例中,第二个树状图改变了 根节点,不是仅仅改变root_vertex就行的,需要先改变图中顶点的顺序。

下面的代码是简略后的代码,完整的代码可以文中最后部分的链接中下载。

初始的树

graph = DiGraph(
layout="tree",
root_vertex=0,
)

重要!!!

修改前需要调整节点和边的顺序

修改根节点

graph2 = DiGraph(
layout="tree",
root_vertex=2,
)

相关文章
|
24天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
16天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
4天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
1天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
215 11
|
19天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
21天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2578 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
3天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
165 2
|
1天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
101 65
|
20天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1578 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
4天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
244 2