2012-02-26 15 views
6

Tôi đang cố gắng vẽ một biểu đồ trong đó khoảng cách giữa các đỉnh tương ứng với trọng số cạnh * và tôi đã thấy rằng trong graphviz có cách vẽ đồ thị đó. Có cách nào để làm điều này trong R với gói igraph (specfically với graph.adkacency)?Hình dung khoảng cách giữa các nút theo trọng số - với R

Cảm ơn,

Noam

Trả lời

4

Đây không phải là tốt khi bạn cần sự bình đẳng tam giác cho mỗi hình tam giác để có thể vẽ như vậy một đối tượng. Vì vậy, bạn chỉ có thể ước tính nó. Đối với điều này, bạn có thể sử dụng thuật toán "lực nhúng". Có một vài trong igraph. Tôi thường sử dụng thuật toán Fruchterman-Reingold.

Xem để biết chi tiết:

library("igraph") 
?layout.fruchterman.reingold 

Edit:

Lưu ý rằng khoảng cách giữa các nút sẽ tương ứng phần nào với nghịch đảo của cạnh trọng lượng tuyệt đối.

3

Giống như Sacha Epskamp đã đề cập, trừ khi dữ liệu của bạn hoàn hảo, bạn không thể vẽ biểu đồ không vi phạm một số bất bình đẳng tam giác. Tuy nhiên, có các kỹ thuật có tên là Multidimensional scaling (MDS) được nhắm mục tiêu để giảm thiểu các vi phạm đó.

Một triển khai trong R là cmdscale từ gói stats. Tôi khuyên bạn nên ví dụ ở dưới cùng của ?cmdscale:

> require(graphics) 
> 
> loc <- cmdscale(eurodist) 
> x <- loc[,1] 
> y <- -loc[,2] 
> plot(x, y, type="n", xlab="", ylab="", main="cmdscale(eurodist)") 
> text(x, y, rownames(loc), cex=0.8) 

Tất nhiên, bạn có thể vẽ xy sử dụng bất kỳ gói đồ họa (bạn được hỏi về igraph cụ thể).

Cuối cùng, tôi chắc chắn bạn sẽ tìm thấy nhiều triển khai khác nếu bạn tìm kiếm "chia tỷ lệ đa chiều" hoặc "MDS". Chúc may mắn.

+2

Cũng lưu ý rằng có một hàm gọi là 'layout.mds' trong' igraph' có vẻ như thực hiện MDS trên ma trận khoảng cách đầy đủ để có được tọa độ bố trí. –

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