R 中的网络和弦图问题

2023-12-23

我有一些类似的数据data.frame d如下。

d <- structure(list(ID = c("KP1009", "GP3040", "KP1757", "GP2243", 
                           "KP682", "KP1789", "KP1933", "KP1662", "KP1718", "GP3339", "GP4007", 
                           "GP3398", "GP6720", "KP808", "KP1154", "KP748", "GP4263", "GP1132", 
                           "GP5881", "GP6291", "KP1004", "KP1998", "GP4123", "GP5930", "KP1070", 
                           "KP905", "KP579", "KP1100", "KP587", "GP913", "GP4864", "KP1513", 
                           "GP5979", "KP730", "KP1412", "KP615", "KP1315", "KP993", "GP1521", 
                           "KP1034", "KP651", "GP2876", "GP4715", "GP5056", "GP555", "GP408", 
                           "GP4217", "GP641"),
                    Type = c("B", "A", "B", "A", "B", "B", "B", 
                             "B", "B", "A", "A", "A", "A", "B", "B", "B", "A", "A", "A", "A", 
                             "B", "B", "A", "A", "B", "B", "B", "B", "B", "A", "A", "B", "A", 
                             "B", "B", "B", "B", "B", "A", "B", "B", "A", "A", "A", "A", "A", 
                             "A", "A"),
                    Set = c(15L, 1L, 10L, 21L, 5L, 9L, 12L, 15L, 16L, 
                            19L, 22L, 3L, 12L, 22L, 15L, 25L, 10L, 25L, 12L, 3L, 10L, 8L, 
                            8L, 20L, 20L, 19L, 25L, 15L, 6L, 21L, 9L, 5L, 24L, 9L, 20L, 5L, 
                            2L, 2L, 11L, 9L, 16L, 10L, 21L, 4L, 1L, 8L, 5L, 11L), Loc = c(3L, 
                                                                                          2L, 3L, 1L, 3L, 3L, 3L, 1L, 2L, 1L, 3L, 1L, 1L, 2L, 2L, 1L, 3L, 
                                                                                          2L, 2L, 2L, 3L, 2L, 3L, 2L, 1L, 3L, 3L, 3L, 2L, 3L, 1L, 3L, 3L, 
                                                                                          1L, 3L, 2L, 3L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 3L)),
               .Names = c("ID", "Type", "Set", "Loc"), class = "data.frame",
               row.names = c(NA, -48L))

我想探索成员之间的关系d$ID使用类似于下面的和弦图。

似乎有几种选择可以做到这一点R. (R 中的和弦图 https://stackoverflow.com/questions/14599150/chord-diagram-in-r).

在我的数据中,关系是根据d$Set(非定向)并且分组是根据d$Loc。以下是我将这些关系映射为和弦图的尝试。

尝试1:使用igraph

我努力了igraph如下所示,节点大小根据度数而定。

# Get vertex relationships
sets <- unique(d$Set[duplicated(d$Set)])
rel <-  vector("list", length(sets))
for (i in 1:length(sets)) {
  rel[[i]] <- as.data.frame(t(combn(subset(d, d$Set ==sets[i])$ID, 2)))
}
library(data.table)
rel <- rbindlist(rel)

# Get the graph
g <- graph.data.frame(rel, directed=F, vertices=d)
clr <- as.factor(V(g)$Loc)
levels(clr) <- c("salmon", "wheat", "lightskyblue")
V(g)$color <- as.character(clr)

# Plot
plot(g, layout = layout.circle, vertex.size=degree(g)*5, vertex.label=NA)

如何修改绘图使其看起来像第一个图?好像没有可以修改的选项igraph layout.circle.

尝试 2:使用Circlize

看起来更平滑的贝塞尔曲线和分组是可能的R包裹circlize。但在这里,我无法对节点进行分组,也无法根据程度调整它们的大小,因为它们被绘制为扇区。

par(mar = c(1, 1, 1, 1), lwd = 0.1, cex = 0.7)
circos.initialize(factors = as.factor(d$ID), xlim = c(0, 10))
circos.trackPlotRegion(factors = as.factor(d$ID), ylim = c(0, 0.5), bg.col = V(g)$color,
                       bg.border = NA, track.height = 0.05)
for(i in 1:nrow(rel)) {
  circos.link(rel[i,1], 0, rel[i,2],0, h = 0.4)

}

然而,这里没有修改节点的选项。事实上它们只能绘制为扇区?那么有没有办法根据度数将扇区修改为大小的圆形节点呢?

尝试 3:使用edgebundleR(https://github.com/garthtarr/edgebundleR https://github.com/garthtarr/edgebundleR)

require(edgebundleR)
edgebundle(g,tension = 0.1,cutoff = 0.5, fontsize = 18,padding=40)

enter image description here It seems here there are limited options to modify the aesthetics.


我做了很多改变edgebundleR。这些现在位于主仓库中。以下代码应该可以让您接近所需的结果。活生生的例子 http://bl.ocks.org/timelyportfolio/3a052a4bcc85275ce469

# devtools::install_github("garthtarr/edgebundleR")

library(edgebundleR)
library(igraph)
library(data.table)

d <- structure(list(ID = c("KP1009", "GP3040", "KP1757", "GP2243", 
                           "KP682", "KP1789", "KP1933", "KP1662", "KP1718", "GP3339", "GP4007", 
                           "GP3398", "GP6720", "KP808", "KP1154", "KP748", "GP4263", "GP1132", 
                           "GP5881", "GP6291", "KP1004", "KP1998", "GP4123", "GP5930", "KP1070", 
                           "KP905", "KP579", "KP1100", "KP587", "GP913", "GP4864", "KP1513", 
                           "GP5979", "KP730", "KP1412", "KP615", "KP1315", "KP993", "GP1521", 
                           "KP1034", "KP651", "GP2876", "GP4715", "GP5056", "GP555", "GP408", 
                           "GP4217", "GP641"),
                    Type = c("B", "A", "B", "A", "B", "B", "B", 
                             "B", "B", "A", "A", "A", "A", "B", "B", "B", "A", "A", "A", "A", 
                             "B", "B", "A", "A", "B", "B", "B", "B", "B", "A", "A", "B", "A", 
                             "B", "B", "B", "B", "B", "A", "B", "B", "A", "A", "A", "A", "A", 
                             "A", "A"),
                    Set = c(15L, 1L, 10L, 21L, 5L, 9L, 12L, 15L, 16L, 
                            19L, 22L, 3L, 12L, 22L, 15L, 25L, 10L, 25L, 12L, 3L, 10L, 8L, 
                            8L, 20L, 20L, 19L, 25L, 15L, 6L, 21L, 9L, 5L, 24L, 9L, 20L, 5L, 
                            2L, 2L, 11L, 9L, 16L, 10L, 21L, 4L, 1L, 8L, 5L, 11L), Loc = c(3L, 
                                                                                          2L, 3L, 1L, 3L, 3L, 3L, 1L, 2L, 1L, 3L, 1L, 1L, 2L, 2L, 1L, 3L, 
                                                                                          2L, 2L, 2L, 3L, 2L, 3L, 2L, 1L, 3L, 3L, 3L, 2L, 3L, 1L, 3L, 3L, 
                                                                                          1L, 3L, 2L, 3L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 3L)),
               .Names = c("ID", "Type", "Set", "Loc"), class = "data.frame",
               row.names = c(NA, -48L))

# let's add Loc to our ID
d$key <- d$ID
d$ID <- paste0(d$Loc,".",d$ID)

# Get vertex relationships
sets <- unique(d$Set[duplicated(d$Set)])
rel <-  vector("list", length(sets))
for (i in 1:length(sets)) {
  rel[[i]] <- as.data.frame(t(combn(subset(d, d$Set ==sets[i])$ID, 2)))
}

rel <- rbindlist(rel)

# Get the graph
g <- graph.data.frame(rel, directed=F, vertices=d)
clr <- as.factor(V(g)$Loc)
levels(clr) <- c("salmon", "wheat", "lightskyblue")
V(g)$color <- as.character(clr)
V(g)$size = degree(g)*5
# Plot
plot(g, layout = layout.circle, vertex.label=NA)


edgebundle( g )->eb

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

R 中的网络和弦图问题 的相关文章

  • 从网络源获取 R 中的数据作为数据框

    我正在尝试使用 RCurl 包将一些空气污染背景数据作为 data frame 直接加载到 R 中 该网站有 3 个下拉框 用于在下载 csv 文件之前选择选项 如下图所示 我试图从下拉框中选择 3 个值 并使用 下载 CSV 按钮将数据作
  • 指定 R 中 hist() 中的 bin 数量?

    我尝试指定垃圾箱的数量hist R为10 如下 gt hist x breaks 10 但垃圾箱的数量并不完全是 10 我尝试了几个其他数量的垃圾箱 结果发生了同样的情况 hist says breaks可以指定 给出直方图单元格数量的单个
  • 分离并重新附加“tools:rstudio”

    又名玩火 以下不起作用 rstd obj lt as environment tools rstudio detach tools rstudio attach rstd obj name tools rstudio 好吧 它似乎有效 但随
  • R-了解 akima::interp 结果中的 NA 值

    我有以下数据框 ref dat k Intensity Slope 1 0 021467214 33 16 2 0 012444759 33 8 3 0 006079156 33 4 4 0 003792025 33 2 5 0 02276
  • ggplot 中的错误问题:“grid.Call(”L_textBounds“, as.graphicsAnnot(x$label), x$x, x$y, … 中的错误”[重复]

    这个问题在这里已经有答案了 我试图在 ggplot 中制作一个条形图 其中我通过强制其中一些标签为长度为零的字符串 即 来指定要显示的标签 但是 我收到错误 Error in grid Call L textBounds as graphi
  • 如何更新条件公式?

    让我直接进入示例 考虑以下等式 frml lt formula y a b x z 使用这样的公式规范 例如和AER ivreg 我想更新这个公式 使其显示为 frml2 lt y a b c x z w 但是 我不确定如何更新条件标志之前
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • 当每个记录都是一个段落并且某些记录有 4 个字段而其他记录有 6 个字段时,如何将文本文件读入 R

    如何读取文本文件 其中每条记录都是一个段落 每个换行符表示单独的字段 复杂的是 有些记录有 4 行 有些记录有 6 行 当字段数量的差异为 1 时 DWin 解决了我的问题 但当字段数量差异为 2 时 一切都崩溃了 你可以有一个在这里看看他
  • 从 R 中的 HTTPS 连接逐行读取

    当创建连接时open r 它允许逐行读取 这对于批量处理大数据流非常有用 例如这个脚本 https gist github com jeroenooms d33a24958d99bb969ac0通过一次读取 100 行来解析相当大的 gzi
  • 将 sf voronoi 多边形裁剪到边界框时出错

    我正在尝试将 voronoi polygons 使用 sf package 创建 剪辑 到边界框 但它引发了我无法定义的错误 我对 R 的空间世界不太有经验 感谢所有帮助 样本数据 stations lt structure list ST
  • 如何更改 Shiny 中 navbarPage 折叠的断点

    我想用shiny navbarPage collapsible TRUE 当在小屏幕上查看我的 Shiny 应用程序时 将导航元素折叠到菜单中 默认情况下 当浏览器宽度小于 940 像素时会触发折叠 有什么方法可以改变这一点 以便在稍大的浏
  • R 更改小数位且不四舍五入

    gt signif 1 89 digits 2 1 1 9 我想要1 8 这有点笨拙 但它会起作用并保持所有数字 x lt 1 829380 trunc dec lt function x n floor x 10 n 10 n Resul
  • 逻辑回归/二项式的 glmnet 误差

    当尝试将 glmnet 与 family binomial 配合以进行逻辑回归拟合时 出现此错误 gt data lt read csv DAFMM HE16 matrix csv header F gt x lt as data fram
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • 比较 R 中的两个字符向量

    我有两个 ID 字符向量 我想比较这两个字符向量 特别是我对以下数字感兴趣 A和B各有多少个ID 有多少个ID在A中但不在B中 有多少个ID在B但不在A 我还想画维恩图 以下是一些可以尝试的基础知识 gt A c Dog Cat Mouse
  • 带 R 的多彩标题

    我想添加颜色某些词在我的图表标题中 我已经能够在这里找到一些先例 http blog revolutionanalytics com 2009 01 multicolor text in r html 具体来说 我希望用撇号括起来的文本 在
  • 如何计算嵌套函数中的粘合表达式?

    我正在尝试嵌套一个函数 该函数将两个字符串粘合在一起 该函数使用组合字符串来命名数据帧的列 然而 问题似乎是粘合表达式没有足够早地评估为字符串 我可以 并且应该 强制在将表达式作为参数传递给另一个函数之前对其进行求值吗 library ti
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • 在 R 中使用 Huggingface Transformer 模型

    我正在尝试在 R 中使用不同的 Huggingface 模型 这是通过 reticulate 导入 Transformer 包来实现的 谢谢 https rpubs com eR ic transfoRmers https rpubs co

随机推荐

  • node.js ejs包含错误

    我正在创建这个模板
  • libc++ 和 libstdc++ 之间的 istream eof 差异

    当链接到 libstdc 和 libc 时 以下 玩具 程序返回不同的内容 这是 libc 中的错误还是我不明白 istream eof 的工作原理 我尝试在 linux 和 mac os x 上使用 g 运行它 在 mac os x 上使
  • 如何向后移植 Qt 中的功能?

    假设有一个使用 Qt 的项目 并且依赖于 Qt 新版本中存在的功能 例如添加的类成员 该项目旨在使用 Qt 的 系统 发行版本进行构建 该版本可能比项目所依赖的版本更旧 幼稚的方法会导致预处理器地狱 void Class foo if QT
  • 如何在Dynamics CRM 2011中获取相关实体

    我们目前正在最近发布的 Dynamics CRM 2011 中开发 Silverlight Web 资源 此时我们希望实现一个自动完成框 显示帐户集合及其地址 我们目前陷入了从账户实体到地址实体所需遵循的关系 目前我刚刚毕业 任何帮助将不胜
  • 在 Python 2.5 中将 Google App Engine blobstore 作为文件写入的正确方法是什么

    当我尝试对 Google App Engine blobstore 进行简单写入时 当前超出了软内存限制 编写此代码以使其不会泄漏内存的正确方法是什么 from future import with statement from googl
  • Laravel 与 mssql (sqlsrv) 未连接

    我正在用 mysql 开发 laravel 它工作得很好 但我现在有另一种情况 我需要将 laravel 连接到驻留在 Windows 服务器上的 ms sql 数据库 我使用以下代码连接到数据库 app config database p
  • 如何将变量添加到我的 re.compile 表达式中

    所以我试图在文件中查找由变量表示的关键字what2look4 然而 每当我运行这个程序时 它总是返回空白数据 代码如下 regex2 re compile what2look4 我相信问题是正在搜索该文件what2look4作为字符串本身而
  • std::basic_string 专业化

    我只需要覆盖 std basic string 中的 length 函数 因为它对于特定平台上的自定义字符类型不正确 这是 CustomString 的当前声明 typedef STL basic string
  • 与 API 交互时标头键变为小写 - React Native

    与 API 交互时 自定义 Header key 始终变为小写 我用的是Fetch Axios XMLHttpRequest and Frisbee javascript网络库 但密钥始终小写 我的代码片段是这样的 带有fetch 方法 我
  • 抑制 OCaml 中的详尽匹配警告

    我在修复 OCaml 编译器向我发出的警告时遇到问题 基本上我正在解析一个可以由以下内容组成的表达式Bool Int and Float 我有一个符号表 用于跟踪用其类型声明的所有符号 type ast type Bool Int Floa
  • 如何在Wildfly中设置两只耳朵的部署顺序

    我对 Wildfly 8 1 中两个应用程序的部署顺序有一些问题 问题是某些模块app2 ear依赖于模块app1 ear but app1 ear部署后app2 ear 我尝试为 app1 指定一个依赖项 如下所示
  • 如何在 ruby​​ 中对哈希数组进行排序

    我有一个数组 其中每个元素都是具有三个键 值对的哈希 phone gt 2130001111 zip gt 12345 city gt sometown 我想对数据进行排序zip所以所有的phone同一区域的人在一起 Ruby 有简单的方法
  • 如何有效地过滤对象中的对象?

    这个问题在SO中已经被提出过很多次了 但是他们都提到了对象数组 就我而言 我想过滤物体的物体 假设我有这个对象 Users w14FKo72BieZwbxwUouTpN7UQm02 name Naseebullah Ahmadi userT
  • 里氏替换原理、前提条件和抽象方法

    里氏替换原理 LSP 说 无法在子类型中强化先决条件 在 C 中 我可能会违反整个原则 如下所示 public class A public virtual void DoStuff string text Contract Require
  • 解决“ObjectContext 实例已被释放,不能再用于需要连接的操作”InvalidOperationException

    我正在尝试填充GridView使用 Entity Frameworkm 但每次我都会收到以下错误 对象 COSIS DAL MemberLoan 上的属性访问器 LoanProduct 抛出以下异常 ObjectContext 实例已被 已
  • 如果在循环内声明指针变量,它是否与循环的每次传递都与相同的内存地址关联?

    如果有一个变量 则有一个与该变量关联的内存地址 对于指针变量 该内存地址的 值 是对保存指针指向的实际数据的内存地址的引用 所以如果我有 for int x 0 x lt 2 x char a char malloc 20 printf p
  • 实体框架4-自定义复杂类型映射

    我有一个写得不好的遗留数据库架构 我正在通过 EF Code First 使用它 我目前正在映射 POCO 实体 并希望创建一个 地址 复杂类型 并在存储街道地址信息的任何地方使用它 不幸的是 并非所有地址字段在数据库中的命名都相同 即 一
  • 如何在整个字符串中搜索特定单词?

    我有这段代码 它搜索字符串数组并在输入字符串与字符串的第一个字符匹配时返回结果 for int i 0 i lt countryCode length i if textlength lt countryCode i length if e
  • java中链式方法是如何执行的?

    这是我的代码 result method1 method2 method3 我想知道上面代码 语句的执行层次 只需通过以下几点即可 确定最左边的方法调用将返回什么 我们称之为 x 使用 x 作为调用第二个 从左侧 方法的对象 如果有 只有两
  • R 中的网络和弦图问题

    我有一些类似的数据data frame d如下 d lt structure list ID c KP1009 GP3040 KP1757 GP2243 KP682 KP1789 KP1933 KP1662 KP1718 GP3339 GP