将顶点属性添加到 NetworkD3 对象
Add an Vertex Attribute to NetworkD3 object
大家好,
为了网络视觉,我一直在努力将颜色组添加到 networkd3 object in r。渲染视觉效果的代码是 stable,但我目前将分组变量设置为 1
。棘手的一点是我有一个单独的 table 用于评估颜色组。
我试图通过首先生成一个列表将其添加为向量。
V(network)$color <- group[V(network)$name]
我还尝试了一个名为 makeVertexAtt
的自定义函数以及使用 igraph 中的 set_vertex_attr
和 vertex_attr-set
,但无济于事。我在网络对象中进行简单连接时遇到的问题是 cannot coerce class ‘"igraph.vs"’ to a data.frame
。很公平,但如果我创建矢量并将其添加进去,我会收到 Not a graph object
错误。
让我们举个例子(因为这不是图形对象)我有这个名称向量:
V(Graph)$names<-c("knife","kitchen","toilet","shower","toothbrush", "shed")
然后我有一个单独的数据集,它有两列,单词和类别。
Word<-c("knife","kitchen","toilet","shower","toothbrush")
Category <-c("Kitchen","Kitchen","bathroom","bathroom","bathroom")
理想情况下,我想要一个具有匹配向量的 V(graph)$color 属性
V(graph)$color<-c("Kitchen","Kitchen","bathroom","bathroom","bathroom","N/A")
如有任何想法,我们将不胜感激。
大家好,我想我的问题已经解决了。 networkD3 对象是列表的列表。 Python 中的这个概念非常好,但在 R 中访问级别我没有使用两个 $
进入列表列表。
所以不要将组变量应用于 network.D3$nodes
。我需要向 network.D3$nodes$group
添加新顶点。所以为了解决我的问题,我同时在调用中创建了一个合并变量,
group<- as.dataframe (Word,Category)
list<-merge (x=network.D3$nodes, y=group, x.by="names", y.by="Word",all.x=TRUE)
network.D3$nodes$group<-list$Category
forceNetwork(Links = network.D3$links,
Nodes = network.D3$nodes,
Source = 'source',
Target = 'target',
NodeID = 'name',
Group = 'group',
opacity = 0.9,
Value = 'Width',
fontSize = 12,
zoom = TRUE,
opacityNoHover = 1)
更新
我发现我的计划有缺陷。出于某种原因,将向量创建为单独的评估然后将其添加回去不起作用,因为 networkD3 对象的顺序发生了变化?这是奇怪的行为。 (不幸的是,由于数据保护,我不能分享真实世界的例子。)
所以我尝试使用以下代码在创建属性时进行评估:
network.D3$nodes$group<- list(merge(x=network.D3$nodes,y=Lexicon, by="name", all.x = TRUE))
但这会将顶点添加为数据框,然后无法将其放置在 forcenetwork
中。在 plyr
中尝试并没有提供任何更好的结果。
network.D3$nodes$group<- Lexicon %>% join(network.D3$nodes,Lexicon,by="name",type = "left")) %>% select(list(Category_1))
>Error in match.arg(match, c("first", "all")) :
'arg' must be NULL or a character vector
如何在匹配评估后添加一个向量,其中结果保存为可以分配给 networkD3 lists of lists 对象的向量?
这是一种将组信息从一个数据帧合并到您的节点数据帧的简单方法
names <- c("knife", "kitchen", "toilet", "shower", "toothbrush", "shed")
nodes <- data.frame(names, stringsAsFactors = FALSE)
Word <- c("knife", "kitchen", "toilet", "shower", "toothbrush")
Category <- c("Kitchen", "Kitchen", "bathroom", "bathroom", "bathroom")
group <- data.frame(Word, Category, stringsAsFactors = FALSE)
nodes$group <- group$Category[match(nodes$names, group$Word)]
nodes
# names group
# 1 knife Kitchen
# 2 kitchen Kitchen
# 3 toilet bathroom
# 4 shower bathroom
# 5 toothbrush bathroom
# 6 shed <NA>
大家好,
为了网络视觉,我一直在努力将颜色组添加到 networkd3 object in r。渲染视觉效果的代码是 stable,但我目前将分组变量设置为 1
。棘手的一点是我有一个单独的 table 用于评估颜色组。
我试图通过首先生成一个列表将其添加为向量。
V(network)$color <- group[V(network)$name]
我还尝试了一个名为 makeVertexAtt
的自定义函数以及使用 igraph 中的 set_vertex_attr
和 vertex_attr-set
,但无济于事。我在网络对象中进行简单连接时遇到的问题是 cannot coerce class ‘"igraph.vs"’ to a data.frame
。很公平,但如果我创建矢量并将其添加进去,我会收到 Not a graph object
错误。
让我们举个例子(因为这不是图形对象)我有这个名称向量:
V(Graph)$names<-c("knife","kitchen","toilet","shower","toothbrush", "shed")
然后我有一个单独的数据集,它有两列,单词和类别。
Word<-c("knife","kitchen","toilet","shower","toothbrush")
Category <-c("Kitchen","Kitchen","bathroom","bathroom","bathroom")
理想情况下,我想要一个具有匹配向量的 V(graph)$color 属性
V(graph)$color<-c("Kitchen","Kitchen","bathroom","bathroom","bathroom","N/A")
如有任何想法,我们将不胜感激。
大家好,我想我的问题已经解决了。 networkD3 对象是列表的列表。 Python 中的这个概念非常好,但在 R 中访问级别我没有使用两个 $
进入列表列表。
所以不要将组变量应用于 network.D3$nodes
。我需要向 network.D3$nodes$group
添加新顶点。所以为了解决我的问题,我同时在调用中创建了一个合并变量,
group<- as.dataframe (Word,Category)
list<-merge (x=network.D3$nodes, y=group, x.by="names", y.by="Word",all.x=TRUE)
network.D3$nodes$group<-list$Category
forceNetwork(Links = network.D3$links,
Nodes = network.D3$nodes,
Source = 'source',
Target = 'target',
NodeID = 'name',
Group = 'group',
opacity = 0.9,
Value = 'Width',
fontSize = 12,
zoom = TRUE,
opacityNoHover = 1)
更新
我发现我的计划有缺陷。出于某种原因,将向量创建为单独的评估然后将其添加回去不起作用,因为 networkD3 对象的顺序发生了变化?这是奇怪的行为。 (不幸的是,由于数据保护,我不能分享真实世界的例子。)
所以我尝试使用以下代码在创建属性时进行评估:
network.D3$nodes$group<- list(merge(x=network.D3$nodes,y=Lexicon, by="name", all.x = TRUE))
但这会将顶点添加为数据框,然后无法将其放置在 forcenetwork
中。在 plyr
中尝试并没有提供任何更好的结果。
network.D3$nodes$group<- Lexicon %>% join(network.D3$nodes,Lexicon,by="name",type = "left")) %>% select(list(Category_1))
>Error in match.arg(match, c("first", "all")) :
'arg' must be NULL or a character vector
如何在匹配评估后添加一个向量,其中结果保存为可以分配给 networkD3 lists of lists 对象的向量?
这是一种将组信息从一个数据帧合并到您的节点数据帧的简单方法
names <- c("knife", "kitchen", "toilet", "shower", "toothbrush", "shed")
nodes <- data.frame(names, stringsAsFactors = FALSE)
Word <- c("knife", "kitchen", "toilet", "shower", "toothbrush")
Category <- c("Kitchen", "Kitchen", "bathroom", "bathroom", "bathroom")
group <- data.frame(Word, Category, stringsAsFactors = FALSE)
nodes$group <- group$Category[match(nodes$names, group$Word)]
nodes
# names group
# 1 knife Kitchen
# 2 kitchen Kitchen
# 3 toilet bathroom
# 4 shower bathroom
# 5 toothbrush bathroom
# 6 shed <NA>