2012-10-02 35 views
8

Tôi đã tìm kiếm câu trả lời cho câu hỏi này nhưng không thể tìm thấy bất kỳ đề cập nào, vì vậy tôi quyết định đăng ở đây. Tôi đang cố gắng xem liệu igraph hay bất kỳ gói nào cung cấp một cách đơn giản để tạo ra một "đồ thị cộng đồng" trong đó mỗi nút đại diện cho một cộng đồng trong mạng và các mối quan hệ đại diện cho mối quan hệ giữa các cộng đồng. Tôi có thể làm cho thuật toán phát hiện cộng đồng hoạt động tốt trong igraph, nhưng tôi không thể tìm cách thu gọn kết quả để chỉ hiển thị các kết nối giữa mỗi cộng đồng. Bất kỳ trợ giúp sẽ được đánh giá cao.tạo biểu đồ cộng đồng trong igraph

+1

Có thể thực hiện điều này bằng igraph nhưng bạn thực sự chưa cung cấp bất kỳ thứ gì có thể lặp lại. Đây là một bài đăng trên blog mà tôi đã làm trên igraph [(LINK1)] (http://trinkerrstuff.wordpress.com/2012/06/29/igraph-and-structured-text-exploration/) và [(LINK 2)] (http : //trinkerrstuff.wordpress.com/2012/06/30/igraph-and-sna-an-amateurs-dabbling/) Yeah tự quảng cáo nhưng nó phù hợp :) Trang web cho igraph rất tốt với nhiều ví dụ là tốt. Một lần nữa chúng ta có thể giúp thêm với một tập dữ liệu ví dụ. –

+0

+1 đến dữ liệu mẫu. – TARehman

Trả lời

19

Bạn chỉ cần sử dụng chức năng contract.vertices(). Điều này hợp đồng nhóm các đỉnh thành một đỉnh duy nhất, về cơ bản giống như cách bạn muốn. Ví dụ.

library(igraph) 

## create example graph 
g1 <- graph.full(5) 
V(g1)$name <- 1:5  
g2 <- graph.full(5) 
V(g2)$name <- 6:10 
g3 <- graph.ring(5) 
V(g3)$name <- 11:15 
g <- g1 %du% g2 %du% g3 + edge('1', '6') + edge('1', '11') 

## Community structure 
fc <- fastgreedy.community(g) 

## Create community graph, edge weights are the number of edges 
cg <- contract.vertices(g, membership(fc)) 
E(cg)$weight <- 1 
cg2 <- simplify(cg, remove.loops=FALSE) 

## Plot the community graph 
plot(cg2, edge.label=E(cg2)$weight, margin=.5, layout=layout.circle) 
+2

Không giống như mã này hoạt động nữa ... –

+2

Thực vậy, tôi đã sửa nó. –

Các vấn đề liên quan