我找到了一种将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), ]
以表格格式(按升降机排序)打印所有规则
使用igraph绘制前10个关联规则
ig <- plot(rules, method="graph", control=list(type="items"))
注意:基于关联规则,我通过使用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图,拦截节点的大小表示“提升”,提升越大,拦截节点的大小越大;与igraph图不同,拦截节点的大小表示“支撑”,而拦截节点的颜色表示“提升”。
让我们比较igraph和visNetwork
通过引用表格式的关联规则,第10条规则(“提升”最小的规则),假设拦截节点的大小最小,但最终并不是最小。
问题
我试图进一步深入到ig_df <- get.data.frame( ig, what = "both" )
,但在ig_df$vertices
表上发现了一些奇怪的东西,该表是由as_data_frame
的{{1}}函数生成的。
我发现assoc10(第10条关联规则的拦截节点)实际上对所有变量(即“ support”,“ confidence”,“ lift”和“ count”)具有library(igraph)
,更确切地说,列的维度NA
中的“支持”,“信心”,“提升”和“计数”正在向上移动一排!如果我错了,请纠正我。
结论
由于将igraph转换为visNetwork的关键是使用此ig_df$vertices
从igraph中提取所有数据并将这些数据转换为数据框,然后使用从提取的数据框中提取数据绘制visNetwork。但是由于使用as_data_frame
从igraph提取数据时出现提取问题,因此结果也有所不同。
问题:这是一个错误吗?还是我的代码有误?任何建议都欢迎。谢谢!
答案 0 :(得分:0)
一年后...但是我也已经键入了所有内容,
如果我理解正确,这就是您遇到麻烦的原因-
value = ig_df$vertices$lift # could change to lift or confidence
最简单的解决方案是将提升值分配给size
,因为在visNetwork size: Number. Default to 25. The size is used to determine the size of node shapes that do not have the label inside of them. These shapes are: image, circularImage, diamond, dot, star, triangle, triangleDown, square and icon
中。我不确定values
在这里的工作方式,但是如果您还提供适当的values
,我想您可以使用scaling
。
https://www.rdocumentation.org/packages/visNetwork/versions/2.0.9/topics/visNodes
解决方案是:
size = ig_df$vertices$lift # could change to lift or confidence
请注意,默认情况下具有NA提升的节点的大小设置为25,而使用2或3提升的节点几乎看不到节点。您可以成倍地增加举升大小,这会增加节点的大小并夸大举升的差异。
ig_df <- as_data_frame(ig, what = "both")
ig_df$vertices["lift"] <- ig_df$vertices["lift"] ** 3
我无法重现您的移位表问题,我的情况看起来还不错,希望它能自行解决!