2017-02-21 37 views
3

Я использую R и igraph для создания двудольного графа, основанного на матрице инцидентов, но мои весы не отображаются? Я добавил пример того, что я пытаюсь сделать ниже. Я установил weighted = TRUE и ожидал, что кромки будут иметь разные веса, но линии имеют одинаковую толщину. Любые предложения относительно того, что я делаю неправильно?R igraph Bipartite Graph, почему мои весы не показываются?

# Load packages 
library(igraph) 

# Create data 
pNames <- paste("P", 1:4, sep="") 
cNames <- paste("c", 1:3, sep="") 
rData <- matrix(sample(4,12,replace=TRUE)-1,nrow=4,dimnames=list(pNames,cNames)) 
print(rData) 

# Graph from matrix 
b <- graph_from_incidence_matrix(rData,weighted=TRUE) 

# Plot with layout 
plot(b, layout=layout.bipartite,vertex.color=c("green","cyan")[V(b)$type+1],edge.width = b$weights) 
+2

Вам просто нужно позвонить весов в вызове печати с использованием 'edge.width = E (B) $ weights'. 'igraph' требует указания ребер,' E (graph) 'или вершин,' V (graph) ', при вызове атрибутов. – paqmo

ответ

2

Вы можете найти атрибуты краев с помощью

get.edge.attribute(b) 
#$weight 
#[1] 2 1 1 3 2 1 2 

Как @paqmo упоминалось, теперь вы знаете имя атрибута, и вы можете использовать его, чтобы установить края ширина/метки:

plot(b, layout=layout.bipartite,vertex.color=c("green","cyan")[V(b)$type+1], 
    edge.width = E(b)$weight, edge.label=E(b)$weight, edge.label.cex=2) 

enter image description here