当前位置: 首页 > news >正文

【图论】 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维稀疏图

在这里插入图片描述
在这里插入图片描述

GraphRecipes.jl 基于 Plots.jl 的包, 功能较为基础。

在这里插入图片描述

GraphMakie.jl 擅长绘制2维,3维空间中的图,交互性更强。

在这里插入图片描述

Karnak.jl 主要擅长绘制 2维图, 且参数设置丰富。

http://www.dtcms.com/a/359942.html

相关文章:

  • Linex进程管理
  • OC-属性关键字
  • GEE 实战:计算 Landsat8 月均 NDVI 并导出(2013-2024)_后附完整代码
  • 【pve】
  • 秋招 AI 方向 —— 华为机考
  • 【学习笔记】LLM Interview(Agent相关)
  • 计算机视觉与深度学习 | 低照度图像处理算法综述:发展、技术与趋势
  • 大数据毕业设计选题推荐-基于大数据的大气和海洋动力学数据分析与可视化系统-Spark-Hadoop-Bigdata
  • (数组的定义与使用) 本篇目标 1. 理解数组基本概念 2. 掌握数组的基本用法 3. 数组与方法互操作 4. 熟练掌握数组相关的常见问题和代码
  • 同类软件对比(三):Python vs Anaconda vs Miniconda:深入解析与选择策略
  • 2025.8.18-2025.8.24第35周:备稿演讲有进步
  • Paimon——官网阅读:Spark 引擎
  • 【图论】Graph.jl 核心函数
  • 如何通过 AI IDE 集成开发工具快速生成简易留言板系统
  • Java面试-微服务(spring cloud篇)
  • 飞牛Docker部署免费frp内网穿透
  • RK3568平台开发系列讲解:瑞芯微平台4G模块篇移植
  • TFS-2005《A Possibilistic Fuzzy c-Means Clustering Algorithm》
  • 商业航天:中、美、欧“软件定义卫星” 路线全解析
  • Iterative loop of ML development|机器学习的迭代发展
  • JavaEE初阶网络原理-初识
  • PythonDay42
  • 提取动漫图像轮廓并拟合为样条曲线(MATLAB)
  • Mysql学习 Day3 Explain详解与索引优化
  • APB验证VIP Agent的各个组件之间的通信
  • SpringAI应用开发面试实录:核心技术、架构设计与业务场景全解析
  • React前端开发_Day12_极客园移动端项目
  • 解决 uni-app 中大数据列表的静默UI渲染失败问题
  • UniApp 基础开发第一步:HBuilderX 安装与环境配置
  • Wi-Fi技术——物理层技术