【问题标题】:Creating new graph basing on cluster anylise - R基于聚类分析创建新图 - R
【发布时间】:2018-11-20 13:44:12
【问题描述】:
library("network")
library("networkD3")
library("igraph")

df1 <- read.table(text = "src   target
                  cllient1  cllient2
                  cllient1  cllient4
                  cllient1  cllient6
                  cllient2  cllient3
                  cllient4  cllient1
                  cllient4  cllient3
                  cllient5  cllient6
                  cllient6  cllient5", header = TRUE)

lesmis <- graph_from_data_frame(df1)
wc <- cluster_walktrap(lesmis)
members <- membership(wc)
lesmis <- igraph_to_networkD3(lesmis, group = members)

D3_network_LM <- networkD3::forceNetwork(Links = lesmis$links, Nodes = lesmis$nodes, 
                                         Source = 'source', Target = 'target', 
                                         NodeID = 'name', Group = 'group', 
                                         opacity = 1,zoom = TRUE)
networkD3::saveNetwork(D3_network_LM, "test.html", selfcontained = TRUE)

如此接近,我们得到了一个网络。之后,我们通过将几个顶点合并为一个来创建新图。在我们的例子中,那些属于特定社区的顶点。

lesmis <- graph_from_data_frame(df1)
cg <- contract.vertices(lesmis, members)
ay <- as_long_data_frame(cg)
View(ay)

我们得到了新的图表,

from    to
1   2

我们可能会再次构建新图,现在这些节点是组,但它们的名称是 1 和 2,我的问题是我们如何将客户端名称添加到这个新图。这样,当悬停时,我们不仅可以获得节点(组)的编号,还可以获得属于这个新节点(组)的客户端列表。

【问题讨论】:

  • 我认为在这里graph_from_data_frame(bank) 你的意思是graph_from_data_frame(df1) 使示例工作,而第二部分恕我直言不工作,有Error in contract.vertices(lesmis, members) : Not a graph object
  • 已编辑,谢谢

标签: r igraph htmlwidgets networkd3


【解决方案1】:

您的示例代码由于多种原因无法正常工作(我对其进行了一些编辑以解决一些明显的问题),但我认为以下实现了您想要做的事情......

library(network)
library(networkD3)
library(igraph)

df <- read.table(header = TRUE, 
                 text = "src   target
                         cllient1  cllient2
                         cllient1  cllient4
                         cllient1  cllient6
                         cllient2  cllient3
                         cllient4  cllient1
                         cllient4  cllient3
                         cllient5  cllient6
                         cllient6  cllient5")

df_graph <- graph_from_data_frame(df)

wc <- cluster_walktrap(df_graph)
members <- membership(wc)

df_graph_cntrctd <- contract(df_graph, members, vertex.attr.comb = toString)

df_graph_cntrctd_D3 <- igraph_to_networkD3(df_graph_cntrctd)

networkD3::forceNetwork(Links = df_graph_cntrctd_D3$links, 
                        Nodes = df_graph_cntrctd_D3$nodes, 
                        Source = 'source', Target = 'target', 
                        NodeID = 'name', Group = 'name', 
                        opacity = 1, zoom = TRUE)

【讨论】:

  • 是的,对于那些愚蠢的错误感到抱歉。你的建议解决了我的问题:) 非常感谢。
  • 您能否使用可重现的示例和/或确切的错误消息来编辑您的原始问题?
  • 但是由于我的真实图形更大,不幸的是我在这行代码 df_graph_cntrctd_D3
  • 错误:无法分配大小为 40 Kb 的向量
  • 是的,我同意。我写了 df_graph_cntrctd stackoverflow.com/questions/52477969/… 来显示框中的列表,而不仅仅是对齐。非常感谢您的帮助和这么好的功能:)
猜你喜欢
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 2016-06-29
  • 1970-01-01
相关资源
最近更新 更多