文章目錄
- 安裝
- 基礎使用
- 基本操作
- 全局圖的指標
- 頂點性質
- 邊性質
- 讀寫圖
- 按照 .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維稀疏圖