边缘无法从data.frame正确转换为geom_net相关图

时间:2019-02-18 23:42:09

标签: r ggplot2

我正在尝试使用R中的geom_net程序包绘制皮尔逊相关网络,但到目前为止仍失败。我不需要使用geom_net,而是选择了geom_net,因为与GGally的edge / vertex语法相比,最初能够在数据帧中工作似乎很直观。但是,与基本软件包替代方案相比,我确实希望使用基于ggplot的选项,因为最终目标是使用gridExtra软件包将ggplot网络与其他ggplot图形合并。颜色与显示正相关和负相关相关,并且仅在少数边缘处始终显示为错误颜色。另外,一个节点显示为未连接,我也不知道为什么。

我一直在进行故障排除,并从此处(Geomnet package - error with user-defined coordinates)和此处(Inproper show when use geom_net in R)获得有用的建议。第一个链接包含有关标签丢失/不匹配的注释,并通过将from和to向量设置为字符来解决该问题。我认为我已经通过改用字母字符解决了这个问题,但事实并非如此(在每种情况下,尽管看起来确实有所帮助,但至少如此)。第二个是节点不出现,因为顶点仅显示为“到”字符而不是“从”字符。为缺失的顶点添加一个“ from”,NA为“ to”有助于解决该问题。

library(geomnet)

from = c("a", "b", "a", "b", "c", "b", "d", "l", "b", "d", "j", "n", "b", "d", "g", "k", "n", "o", "n", "p", "m", "q", "r")
to = c("b", "c", "l", "l", "l", "m", "m", "m", "o", "o", "o", "o", "p", "p", "p", "p", "p", "p", "q", "r", NA, NA, NA )
col = c("darkgreen", "darkgreen", "darkgreen", "darkgreen", "darkgreen", "darkgreen", "darkgreen", "darkgreen", "red", "red", "red","red",      
    "red","red","darkgreen", "red", "red", "red", "red", "red",  NA,NA, NA )
dat = data.frame(from, to, col)
dat$from = as.character(dat$from)
dat$to = as.character(dat$to)

ggplot(data = dat, aes(from_id = from,to_id = to)) + theme_net() + 
geom_net(directed = FALSE, labelon = TRUE, repel = FALSE, ecolour = 
dat$col, labelcolour = "white", size = 12, layout.alg = 
"fruchtermanreingold")

dat

第一个也是最明显的问题是'r'节点没有通过边缘连接,但是应该通过红色边缘将其连接到'p'。

当您查看dat时,一个示例节点表明我的代码是错误的,因为'o'在图中显示了4个红色边和1个绿色,而根据dat,所有涉及'o'的行应为红色。

我将继续对此进行讨论,如果我弄清楚了会进行更新,但是希望您能为解决我的情节中的这些问题提供任何投入。

谢谢!

1 个答案:

答案 0 :(得分:0)

所以我似乎已经解决了我的问题,并且有机会在更大的数据集中测试了我的解决方案。决定发布,以防其他人遇到类似问题。无论如何,我强烈建议您找到一种使用geomnet来检查节点是否已连接的方法。 enter image description here

显然,按datfrom进行排序可以设置顺序,而geomnet不必重新组织我的数据框,从而可以将值从其适当的列中分离出来。另外,使用字母或数字字符并不重要,只要它实际上是一个字符即可。

所以我的原始代码只需要在绘制之前修改为包括以下行即可:

dat = dat[order(dat$from),]