将图形转换为visNetwork

问题描述 投票:3回答:1

我找到了一种将igraph转换为visNetwork的方法(请参阅Interactive arules with arulesViz and visNetwork)。假设从igraph转换为visNetwork之前和之后应该是相同的,但是我的结果显示转换为visNetwork之后的结果是不同的。

我将尝试使用data("Groceries")中的示例数据Library(arules)来演示该问题。

#Pre-defined library
library(arules)
library(arulesViz)
library(visNetwork)
library(igraph)

#Get sample data & get association rules
data("Groceries")
rules <- apriori(Groceries, parameter=list(support=0.01, confidence=0.4))
rules <- head(sort(rules, by="lift"), 10)

#Convert rules to data.table
library(data.table)
rules_dt <- data.table( lhs = labels( lhs(rules) ), 
                        rhs = labels( rhs(rules) ), 
                        quality(rules) )[ order(-lift), ]

以表格格式打印所有规则(按升降机排序)

enter image description here

通过使用igraph绘制前10个关联规则

ig <- plot(rules, method="graph", control=list(type="items"))

enter image description here

注:根据关联规则,我使用igraph绘制了网络图,一切正确。接下来,我将尝试将现有的igraph转换为visNetwork,然后我们比较结果。

tf <- tempfile( )
saveAsGraph(rules, file = tf, format = "dot" )
# clean up temp file if desired
#unlink(tf)

# Convert igraph to dataframe
ig_df <- as_data_frame(ig, what = "both")

# Plot visNetwork
visNetwork(
  nodes = data.frame(
     id = ig_df$vertices$name
 ,value = ig_df$vertices$lift # could change to lift or confidence
 ,title = ifelse(ig_df$vertices$label == "",ig_df$vertices$name, 
 ig_df$vertices$label)
 ,ig_df$vertices
 ), 
edges = ig_df$edges
) %>%
visEdges(arrows ="to") %>%  
visOptions( highlightNearest = T )

使用visNetwork绘制前10个关联规则enter image description here

[[注:对于visNetwork图,拦截节点的大小表示“提升”,提升越高,拦截节点的大小越大;与igraph图不同,拦截节点的大小表示“支撑”,而拦截节点的颜色表示“提升”。

让我们比较igraph和visNetwork

enter image description here通过引用表格式的关联规则(第10条规则(“举升”最小的规则)),假设拦截节点的大小最小,但最终并不是最小。

问题] >>

我试图进一步深入研究ig_df <- get.data.frame( ig, what = "both" ),但在ig_df$vertices表上发现了一些奇怪的东西,该表是从as_data_framelibrary(igraph)函数生成的。enter image description here我发现assoc10(关联规则10的拦截节点)实际上对所有变量(即“支撑”,“信心”,“提升”和“计数”)都具有NA,更确切地说,列“支撑”的维数ig_df$vertices中的“,”信心”,“提升”和“计数”正在向上移动一排!如果我错了,请纠正我。.

结论

由于将igraph转换为visNetwork的关键是使用此as_data_frame从igraph中提取所有数据并将这些数据转换为数据框,因此使用从提取的数据框中提取数据绘制visNetwork。但是由于使用as_data_frame从igraph提取数据时的提取问题,因此结果也有所不同。

问题:

这是一个错误吗?还是我的代码有误?任何建议都欢迎。谢谢!

我找到了一种将igraph转换为visNetwork的方法(请参阅带有arulesViz和visNetwork的Interactive arules)。假设从igraph转换为visNetwork之前和之后应该相同,但是我的...

r igraph arules visnetwork
1个回答
0
投票

一年后...但是我也已经键入了所有内容,因此也可以。

© www.soinside.com 2019 - 2024. All rights reserved.