【问题标题】:Most elegant way to convert lists into igraph object for plotting将列表转换为 igraph 对象以进行绘图的最优雅方法
【发布时间】:2018-12-23 19:25:12
【问题描述】:

我是 igraph 的新手,它似乎是一个非常强大(因此也很复杂)的包。

我尝试将以下列表转换为 igraph 对象。

graph <- list(s = c("a", "b"),
              a = c("s", "b", "c", "d"),
              b = c("s", "a", "c", "d"),
              c = c("a", "b", "d", "e", "f"),
              d = c("a", "b", "c", "e", "f"),
              e = c("c", "d", "f", "z"),
              f = c("c", "d", "e", "z"),
              z = c("e", "f"))

weights <- list(s = c(3, 5),
                a = c(3, 1, 10, 11),
                b = c(5, 3, 2, 3),
                c = c(10, 2, 3, 7, 12),
                d = c(15, 7, 2, 11, 2),
                e = c(7, 11, 3, 2),
                f = c(12, 2, 3, 2),
                z = c(2, 2))

解释如下:s是起始节点,它链接到节点absa 的边权重为 3,sb 的边权重为 5,依此类推。

我尝试了igraph 的各种功能,但只得到各种错误。将上述内容转换为igraph 对象以绘制图形的最优雅、最简单的方法是什么?

【问题讨论】:

    标签: r igraph


    【解决方案1】:

    创建一个边缘列表,然后从中创建一个图形。分配权重并绘制它。

    set.seed(123)
    
    e <- as.matrix(stack(graph))
    g <- graph_from_edgelist(e)
    E(g)$weight <- stack(weights)[[1]]
    
    plot(g, edge.label = E(g)$weight)
    

    【讨论】:

    • 这里使用stack确实很优雅——谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多