【问题标题】:Plotting directed multigraphs in R在 R 中绘制有向多重图
【发布时间】:2026-01-04 08:40:01
【问题描述】:

我从未在 R 中使用过任何图形绘图包,我熟悉基本绘图命令和 ggplot2 包。我发现(但还没有尝试过)是Rgraphviznetworkigraph 包。所以我想问你,哪个包的学习曲线最简单,并且满足以下要求:

  • 具有简单的布局引擎(弹簧布局、随机...)
  • 尝试在两个顶点之间绘制多条边,以使它们不会重叠。作为奖励,如果能够对此进行调整,那就太好了。
  • 可以绘制循环。
  • 顶点和边标签、顶点和边的大小和颜色都可以调整。
  • (不需要任何图算法,如链接分析、最短路径、最大流量等,但如果存在的话很好)

【问题讨论】:

    标签: r graph plot


    【解决方案1】:

    igraph 包似乎可以满足您的要求,tkplot() 功能有助于在需要时调整最终布局。

    这是一个使用示例:

    s <- cbind(A=sample(letters[1:4], 100, replace=TRUE),
               B=sample(letters[1:2], 100, replace=TRUE))
    s.tab <- table(s[,1], s[,2])
    library(igraph)
    s.g <- graph.incidence(s.tab, weighted=T)
    plot(s.g, layout=layout.circle, 
         vertex.label=c(letters[1:4],letters[2:1]),     
         vertex.color=c(rep("red",4),rep("blue",2)), 
         edge.width=c(s.tab)/3, vertex.size=20, 
         vertex.label.cex=3, vertex.label.color="white")
    

    使用交互式显示(有可能使用rgl 进行3D 显示),它看起来像(之后我稍微移动了一个顶点):

    tkplot(s.g, layout=layout.circle, vertex.color=c(rep("red",4),rep("blue",2)))
    

    最后,您甚至可以将图形导出为最常见的格式,例如用于 graphviz 的 dot

    【讨论】:

    • 谢谢。当我需要再次绘制图表时,我会尝试 igraph !只是为了提供信息,我在提出问题后选择了 RGraphviz,并通过重新制定我的原始任务来摆脱绘制多条边的要求。
    • @Timo 很高兴听到您使用 graphviz 找到了自己的方式。我也经常使用它。只是igraph 是最强大的,IMO。 (顺便说一句,我对你的 Q 的 +1,当我回答时我没有投票了:-)
    【解决方案2】:

    multigraph R 包也很有用。对于上面的例子bmgraph 绘制了这样的图:

    library("multigraph")
    bmgraph(s.tab, layout = "circ", pch = 16:16, pos = 0, vcol = 6:7, lwd = 3, cex = 9)
    



    对于定向版本:

    bmgraph(s.tab, "circ", pch = 16:16, pos = 0, vcol = 6:7, lwd = 3, cex = 9, directed = TRUE)
    

    【讨论】: