在 R/igraph 中可视化具有 3 层(三方)的图/网络

2024-03-11

我有一个“分层”网络,有 3 层,比如说父母(P)、孩子(C)、孙子(G)。边缘总是指向年轻一代(专利->子代、子代->孙子或父代->孙子)。同一代中的顶点之间没有边。 该图由 3 个边列表(P_C、C_G、P_C)表示。下面给出一个简短的例子。

1)这种图/网络的正确术语是什么?三方图?因此,我认为这是一个特殊情况,因为缺乏向后连接。

2)如何将其表示为 R 中的图形对象(igraph)?

3)我可以用描述“层”的方式绘制图形,每个组(P,C,GC)的所有顶点都在相同的x坐标上对齐,从左侧的P,中间的C开始, GC在右边吗?

4)考虑到数据的分层性质,我可以检查具有这种结构的图之间的图同构吗? (我知道对于常规图来说,它将是 graph.isomorphic() 函数)。

edge_P_C <- read.table(text="P C
A B
A C", header=T)

edge_C_G <- read.table(text="C G
B D
B E
C F", header=T)

edge_P_G <- read.table(text="P G
A G", header=T)

1. Term

我想你可以说这是一个三方图,但我不确定这个术语是否用于有向图。

2. 创建图表

创建一个图形对象(使用 igraph 包)只需rbind所有边并使用 igraph.data.frame 创建它。绑定之前,列名必须匹配。

all_edges <- do.call(rbind,
  lapply( list(edge_C_G, edge_P_C, edge_P_G), function(x) setNames(x, c("1","2")) )
)

g1 <- graph.data.frame(d = all_edges, directed = TRUE)

3. Plot

您需要在每个顶点上设置图层属性。据我了解,该层是由输入数据(三个表)隐式定义的:

v_layers_df <- unique( rbind(
  expand.grid( ID = edge_P_C$P, Layer = 1),
  expand.grid( ID = edge_P_G$P, Layer = 1),
  expand.grid( ID = edge_P_C$C, Layer = 2),
  expand.grid( ID = edge_C_G$C, Layer = 2),
  expand.grid( ID = edge_C_G$G, Layer = 3),
  expand.grid( ID = edge_P_G$G, Layer = 3)
))

v_layers <- setNames( v_layers_df$Layer, v_layers_df$ID)
V(g1)$layer <- v_layers[V(g1)$name]

通过顶点上的图层属性,您可以在自己的布局函数中使用它(修改后的 Sugiyama):

layout.k_partite <- function(g) {
  l <- layout.sugiyama(g)$layout[,2:1]
  l[,1] <- V(g1)$layer
  l[,2] <- - l[,2] + 1 + max(l[,2])
  l
}

并这样使用它:

plot(g1, layout = layout.k_partite(g1))

4. 同构

The graph.isomorphic和其他功能igraph包应该表现得很好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R/igraph 中可视化具有 3 层(三方)的图/网络 的相关文章

随机推荐

  • 处理 JSON 响应时是否需要嵌套循环?

    我有一个字典列表 JSON 响应 每个字典都包含一个带有字符串列表的键值对 我正在使用嵌套的 for 循环处理这些字符串 效果很好 但是 我想知道是否可以使用以下命令将两个 for 循环折叠成一个循环 product方法 显然我不能使用循环
  • 类型错误:浏览器未定义(Web 扩展消息传递)

    我正在尝试使用下面的代码将我的网页脚本与我的网络扩展的内容脚本进行通信 网页脚本 const browser window browser window chrome browser runtime sendMessage message
  • 单击时隐藏 Twitter Bootstrap 中的模态框

    这是来自 twitter bootstrap 但是的示例代码 div class modal div class modal header div div
  • 存储捕获范围变量作为类成员以重用的 lambda 函数

    在我的课堂上 很多方法都有这样的片段 std string str getSomeStr auto it std find if vec begin vec end str const std string b return str abc
  • 将 AngularJS 控制器分离到单独的文件中

    我在用用户界面路由器 https github com angular ui ui router与我的 AngularJS 应用程序一起使用 我想知道如何将角度控制器拆分为不同的文件以使它们更加干净 例如 var app angular m
  • 如何在 pygame 中碰撞并降低玩家生命值?

    我正在使用 pygame 和 random 模块用 python 编写 2D 游戏 但我的代码遇到了一些问题 一个问题是 两个玩家都没有受到任何伤害 对于每个玩家来说 每击中 100 点生命值的子弹都会造成 10 点伤害 子弹和玩家都是精灵
  • 访问 Ratchet Web 套接字请求中的额外参数

    我已经设置了Ratchet http socketo me docs hello world用于 PHP 中的 websocket 它使用 ws localhost 8080 从我的 javascript 客户端连接正常 并成功发送 接收消
  • 特定便携式区域的ControllerFactory

    我的主要 ASP NET MVC 复合应用程序使用全局 Unity 容器来注册类型 该应用程序将控制器工厂设置为使用此全局容器 我想重构这一点 以便我的每个可移植区域都利用它自己的子 Unity 容器 以便不同的区域可以以不同的方式实现接口
  • 构建设置中缺少压缩 Png 文件

    我正在构建一个包含相当多图像的应用程序 因此我使用 ImageOptim 将它们全部粉碎以帮助减小 IPA 的大小 然而我的应用程序的大小根本没有改变 我查看了他们的网站 他们说要关闭Compress Png Files在 打包 下的 构建
  • 在Java中写long和double不是原子的?

    单个变量的读写是原子的 语言保证 除非该变量是 long 或 double 类型 我正在阅读一门课程的幻灯片 发现上面写着 这门课是关于并发的 谁能向我解释为什么写 long 或 double 不是原子操作 这着实让我大吃一惊 它不是原子的
  • SplashScreen java 更改 alpha

    我正在循环遍历一些 png 来为 java 启动画面创建动画 我用这个开始动画 java splash images anim png SplashDemo 并在类中使用 png 您可以在这里找到该课程 http pastebin com
  • 使用 javascript 设置隐藏字段的值,然后从服务器端 C# 代码访问值

    我正在使用一个嵌套的 html 无序列表 样式为下拉列表 当单击内部列表列表项中的 a 标记时 它会触发一些 JavaScript 该 JavaScript 应该将隐藏字段的值设置为所单击链接的文本 javascript 似乎可以工作 我使
  • 在没有 Spring Security 的情况下保留 Spring 会话

    我正在寻求帮助来配置 Spring Boot 以在不使用 Spring Security 的情况下保留 Spring 会话 我从HttpSession JDBC Spring Boot 示例应用程序 https github com spr
  • 在 SQL Server 中,如何使用系统表/视图识别特定表的*所有*依赖关系?

    我正在编写一个 DDL 脚本来删除多个表 但需要首先确定这些表的所有依赖项 这些依赖项包括外键约束 存储过程 视图等 最好 我想在删除依赖表之前使用系统表 视图以编程方式编写脚本来删除这些依赖项 从头开始编写这非常混乱 您是否考虑过像这样的
  • 枚举值“”对于类型>“EnumType”无效并且无法序列化

    当使用 DataContractSerializer 编写具有如下成员的 DataContract 时 DataMember public PropertyId PropId get set 它报告序列化错误 SerializationEx
  • Angular2 是否有相当于 $document 的东西

    我已经开始研究 Angular2 并拥有 3 个嵌套组件的基本功能 但是我无法弄清楚如何将按键处理程序添加到文档中 如果没有 我将如何监听文档上的按键并做出反应 需要明确的是 我需要响应文档本身的 kepyress 而不是输入 在 Angu
  • Bootstrap 侧边栏滚动、附加和滚动监视

    NEWER 所以滚动现在正在工作 但它固定在页面顶部 我需要它位于正确的位置 内容旁边 然后开始在内容的当前位置滚动 我正在尝试让我的侧边栏像这里一样滚动 gt http getbootstrap com 2 3 2 components
  • 为什么 JavaScript 中的数组显示错误长度

    我正在学习 JavaScript 作为学习的一部分 我遇到了以下场景 我期望 a1 length 代码的最后一行 显示 201 但它显示 101 有什么想法吗 var a1 new Array for var i 100 i lt 100
  • NativeScript:如何禁用 WebView 中的缩放控件?

    我从以下问题中找到了在 Android WebView 中启用 禁用缩放控件的方法 如何删除Android webview上的缩放按钮 https stackoverflow com questions 10766669 how to re
  • 在 R/igraph 中可视化具有 3 层(三方)的图/网络

    我有一个 分层 网络 有 3 层 比如说父母 P 孩子 C 孙子 G 边缘总是指向年轻一代 专利 gt 子代 子代 gt 孙子或父代 gt 孙子 同一代中的顶点之间没有边 该图由 3 个边列表 P C C G P C 表示 下面给出一个简短