有向无环图

作者

[编辑] 郑虎;

[审核] .

修改于

2026-04-21

🤖 AI Skill — Download the Bizard unified skill for your AI assistant ⬇️ Download Skill ZIP
注记

Hiplot 网站

本页面为 Hiplot Directed Acyclic Graphs 插件的源码版本教程,您也可以使用 Hiplot 网站实现无代码绘图,更多信息请查看以下链接:

https://hiplot.cn/basic/ggdag?lang=zh_cn

有向无环图可视化。

环境配置

  • 系统: Cross-platform (Linux/MacOS/Windows)

  • 编程语言: R

  • 依赖包: ggdag

# 安装包
if (!requireNamespace("ggdag", quietly = TRUE)) {
  install.packages("ggdag")
}

# 加载包
library(ggdag)
sessioninfo::session_info("attached")
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.5.3 (2026-03-11)
 os       Ubuntu 24.04.4 LTS
 system   x86_64, linux-gnu
 ui       X11
 language (EN)
 collate  C.UTF-8
 ctype    C.UTF-8
 tz       UTC
 date     2026-04-21
 pandoc   3.1.3 @ /usr/bin/ (via rmarkdown)
 quarto   1.9.37 @ /usr/local/bin/quarto

─ Packages ───────────────────────────────────────────────────────────────────
 package * version date (UTC) lib source
 ggdag   * 0.2.13  2024-07-22 [1] RSPM

 [1] /home/runner/work/_temp/Library
 [2] /opt/R/4.5.3/lib/R/site-library
 [3] /opt/R/4.5.3/lib/R/library
 * ── Packages attached to the search path.

──────────────────────────────────────────────────────────────────────────────

数据准备

# 加载数据
tidy_ggdag <- dagify(
  y ~ x + z2 + w2 + w1,
  x ~ z1 + w1 + w2,
  z1 ~ w1 + v,
  z2 ~ w2 + v,
  w1 ~ ~w2, # bidirected path
  exposure = "x",
  outcome = "y") %>%
  tidy_dagitty()

# 查看数据
head(tidy_ggdag)
$data
# A tibble: 13 × 8
   name       x       y direction to      xend   yend circular
   <chr>  <dbl>   <dbl> <fct>     <chr>  <dbl>  <dbl> <lgl>   
 1 v     -1.51  -0.0344 ->        z1    -0.487 -1.01  FALSE   
 2 v     -1.51  -0.0344 ->        z2    -0.538  0.992 FALSE   
 3 w1     0.961 -0.561  ->        x      0.339 -0.465 FALSE   
 4 w1     0.961 -0.561  ->        y      0.923  0.607 FALSE   
 5 w1     0.961 -0.561  ->        z1    -0.487 -1.01  FALSE   
 6 w1     0.961 -0.561  <->       w2     0.310  0.473 FALSE   
 7 w2     0.310  0.473  ->        x      0.339 -0.465 FALSE   
 8 w2     0.310  0.473  ->        y      0.923  0.607 FALSE   
 9 w2     0.310  0.473  ->        z2    -0.538  0.992 FALSE   
10 x      0.339 -0.465  ->        y      0.923  0.607 FALSE   
11 y      0.923  0.607  <NA>      <NA>  NA     NA     FALSE   
12 z1    -0.487 -1.01   ->        x      0.339 -0.465 FALSE   
13 z2    -0.538  0.992  ->        y      0.923  0.607 FALSE   

$dag
dag {
v
w1
w2
x [exposure]
y [outcome]
z1
z2
v -> z1
v -> z2
w1 -> x
w1 -> y
w1 -> z1
w1 <-> w2
w2 -> x
w2 -> y
w2 -> z2
x -> y
z1 -> x
z2 -> y
}

可视化

# 有向无环图
p <- ggdag(tidy_ggdag) +
  theme_dag() 

p
图 1: 有向无环图