【图论】 Graph.jl 概览
文章目录
- 安装
- 基础使用
- 基本操作
- 全局图的指标
- 顶点性质
- 边性质
- 读写图
- 按照 .lgz 格式存储图数据(压缩格式)
- 按照 .lg 格式存储图数据(非压缩格式)
- 图的绘制
- TikzGraphs.jl Latex 论文风格
- GraphPlot.jl 通常与 Compose.jl 一起使用
- SGtSNEpi.jl 擅长画 2维,3维稀疏图
- GraphRecipes.jl 基于 Plots.jl 的包, 功能较为基础。
- GraphMakie.jl 擅长绘制2维,3维空间中的图,交互性更强。
- Karnak.jl 主要擅长绘制 2维图, 且参数设置丰富。
参考链接
https://juliagraphs.org/Graphs.jl/stable/
图论是数学,计算机等学科常见的课程设置。由于 Julia 语言运算速度高效的原因, 其第三方包的非常丰富且社区活跃。无论是指标计算,还是算法设计都有广泛的生态。
Graph.jl 是最为基础的图论包。可以与 Python语言 的 NetworkX 包类比。
安装
using Pkg
Pkg.add("Graphs")
Pkg.add("Karnak")
基础使用
using Graphs 调用图论包
using Karnak 调用图论绘图包
g=path_graph(6) # 生成无向简单图,权重为整数
println(nv(g)) # 图的顶点数
println(ne(g)) # 图的边数
@drawsvg beginbackground("grey10")sethue("orange")drawgraph(g,vertexlabels = [1, 2, 3, 4,5,6])
using Graphs # 调用图论包
using Karnak # 调用图论绘图包
g=path_graph(6) # 生成无向简单图,权重为整数
add_edge!(g, 2, 4) # 添加边
@drawsvg begin
background("grey10")
sethue("skyblue")
drawgraph(g,vertexshapesizes = [20, 20, 20, 20, 20, 20],vertexlabelfontsizes = 10,vertexlabels =["a","b","c","d","e","f"])
end 600 300
基本操作
代码 | 含义 |
---|---|
add_vertex!(g) | 向图g添加1个顶点 |
add_vertices!(g, n) | 向图g添加 n 个顶点 |
add_edge!(g, s, d) | 将边 (s, d) 添加到图 g |
rem_vertex!(g, v) | 将顶点 v 从图 g移除 |
rem_edge!(g, s, d) | 将边 (s, d) 从 g 移除 |
全局图的指标
代码 | 含义 |
---|---|
nv(g) | g的顶点数 |
ne(g) | g变数 |
vertices(g) | 图 g 包含的所有顶点 |
edges(g) | 图 g 包含的所有边 |
has_vertex(g, v) | 验证顶点 v 是否在 g 中 |
has_edge(g, s, d) | 验证边 (s,d) 是否在 g 中 |
has_self_loops(g) | 验证图 g 的所有自回路(圈) |
is_directed(g) | 验证图g是否有向图 |
eltype(g) | 验证 g 所有顶点的类型 |
顶点性质
代码 | 含义 |
---|---|
neighbors(g, v) | 返回点 v 的邻域, (若有向图返回所有外邻域) |
all_neighbors | 返回点 v 的邻域(若有向图返回所有外邻域和内邻域) |
边性质
代码 | 含义 |
---|---|
src(e) | 给出边 (s,d) 的起点 |
dst(e) | 给出边 (s,d) 的终点 |
reverse(e) | 添加新边在 (s,d) 基础上添加 (d,s) |
读写图
按照 .lgz 格式存储图数据(压缩格式)
using Graphs # 调用图论包
g=path_graph(6) # 生成无向简单图,权重为整数
savegraph("mygraph.lgz", g) # 保存
reloaded_g = loadgraph("mygraph.lgz") # 读取
按照 .lg 格式存储图数据(非压缩格式)
using Graphs
g=path_graph(6)
savegraph("mygraph.lg", g)
reloaded_g = loadgraph("mygraph.lgz")
更多格式的读取与存储需要 GraphIO.jl
图的绘制
常见包
TikzGraphs.jl Latex 论文风格
GraphPlot.jl 通常与 Compose.jl 一起使用
SGtSNEpi.jl 擅长画 2维,3维稀疏图