igraph 不适用于 edge.width 负相关系数
igraph does not apply edge.width for negative correlation coefficients
简单地说,我想在去除不重要的值后,根据相关强度绘制边缘。我可以对 edge.betweeness
的正相关对执行此操作,但不幸的是不能对负相关对执行此操作:
data <- matrix(rnorm(100),10,10)
colnames(data) <- LETTERS[1:10]
library(Hmisc)
cor1 <- rcorr(data)
diag(cor1$r) <- 0
library(igraph)
#####Example 1:
graph <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower")
graph <- delete.edges(graph, E(graph)[ weight < 0.3 & weight > -0.3])
#####trying to pass edge weights to edge.width
plot.igraph(graph, vertex.size=20, edge.width=E(graph)$weight)
###edge.width=E(graph)$weight is ignored
#####Example 2:
graph <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower")
graph <- delete.edges(graph, E(graph)[ weight < 0.3]) #omitting the 2nd condition
E(graph)$weight <- edge.betweenness(graph) #apparently required
plot.igraph(graph, vertex.size=20, edge.width=E(graph)$weight)
####this does work, but only for positive correlation coefficients
#####Example 3:
graph <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower")
graph <- delete.edges(graph, E(graph)[ weight < 0.3 & weight > -0.3])
E(graph)$weight <- edge.betweenness(graph)
#####gives error: Error in .Call("R_igraph_edge_betweenness", graph, directed, weights, :
#################At centrality.c:2046 : Weight vector must be non-negative, Invalid value
那么,我如何将负相关值传递给 edge.width
?
您可以使用彩色边来表示负相关和正相关,并使用 edge.width 来表示相关的大小。在下面的示例中,我进行了以下更改:
- 将图形对象的名称更改为
g1
,因为graph
是
igraph 包中的一个函数。
- 为简洁起见,使用边删除条件的绝对值。
- 将
edge.width
参数更改为 abs(E(g1)$weight)*8
。这
绝对值确保权重始终为正。
乘以8只会使边宽变大。
- 添加了
edge.color
参数来为蓝色的顶点着色
正相关,红色表示负相关。
#####Example 3:
g1 <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower")
g1 <- delete.edges(g1, E(g1)[ abs(weight) < 0.3 ])
plot.igraph(g1, vertex.size=20, edge.width=abs(E(g1)$weight)*8,
edge.color=ifelse(cor1$r > 0, "blue","red"))
简单地说,我想在去除不重要的值后,根据相关强度绘制边缘。我可以对 edge.betweeness
的正相关对执行此操作,但不幸的是不能对负相关对执行此操作:
data <- matrix(rnorm(100),10,10)
colnames(data) <- LETTERS[1:10]
library(Hmisc)
cor1 <- rcorr(data)
diag(cor1$r) <- 0
library(igraph)
#####Example 1:
graph <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower")
graph <- delete.edges(graph, E(graph)[ weight < 0.3 & weight > -0.3])
#####trying to pass edge weights to edge.width
plot.igraph(graph, vertex.size=20, edge.width=E(graph)$weight)
###edge.width=E(graph)$weight is ignored
#####Example 2:
graph <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower")
graph <- delete.edges(graph, E(graph)[ weight < 0.3]) #omitting the 2nd condition
E(graph)$weight <- edge.betweenness(graph) #apparently required
plot.igraph(graph, vertex.size=20, edge.width=E(graph)$weight)
####this does work, but only for positive correlation coefficients
#####Example 3:
graph <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower")
graph <- delete.edges(graph, E(graph)[ weight < 0.3 & weight > -0.3])
E(graph)$weight <- edge.betweenness(graph)
#####gives error: Error in .Call("R_igraph_edge_betweenness", graph, directed, weights, :
#################At centrality.c:2046 : Weight vector must be non-negative, Invalid value
那么,我如何将负相关值传递给 edge.width
?
您可以使用彩色边来表示负相关和正相关,并使用 edge.width 来表示相关的大小。在下面的示例中,我进行了以下更改:
- 将图形对象的名称更改为
g1
,因为graph
是 igraph 包中的一个函数。 - 为简洁起见,使用边删除条件的绝对值。
- 将
edge.width
参数更改为abs(E(g1)$weight)*8
。这 绝对值确保权重始终为正。 乘以8只会使边宽变大。 - 添加了
edge.color
参数来为蓝色的顶点着色 正相关,红色表示负相关。
#####Example 3:
g1 <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower")
g1 <- delete.edges(g1, E(g1)[ abs(weight) < 0.3 ])
plot.igraph(g1, vertex.size=20, edge.width=abs(E(g1)$weight)*8,
edge.color=ifelse(cor1$r > 0, "blue","red"))