2016-12-19 40 views
8

Tôi có ma trận kề kề khá lớn (nhưng khá thưa thớt) mà tôi đang cố gắng trình bày trực quan. Dường như với tôi rằng một cái gì đó giống như đồ thị lực lượng là đặt cược tốt nhất của tôi và trong khi cố gắng tìm ra cách tốt nhất để thực hiện điều này, tôi đã xem qua nhiều tài nguyên cho R. Điều hữu ích nhất là hình ảnh hóa mạng trên http://kateto.net/network-visualization Mặc dù tôi chưa bao giờ sử dụng R trước đây, có vẻ như có nhiều tính năng hữu ích cho loại hình trực quan này.Đúng cách vẽ ma trận kề kề lớn trong R

Tôi đã quản lý để tạo ra một âm mưu bên dưới nhưng hình ảnh khá nhỏ và các nút được xếp chồng lên nhau.

enter image description here

Độ phân giải là tốt hơn một chút nếu tôi in ra một pdf như trái ngược với một PNG, nhưng tôi vẫn còn có vấn đề sắp xếp. Câu hỏi của tôi là do đó, làm thế nào tôi sẽ vẽ đúng một ma trận kề rộng lớn trong R để giải quyết những vấn đề này.

Mã của tôi cho đến thời điểm này như sau (với một vài dòng cuối cùng mà tôi đã cố gắng vẽ dữ liệu của mình). Bất kỳ lời khuyên được đánh giá rất nhiều. Cảm ơn bạn trước.

Để thuận tiện, tôi đã tải lên hai tệp được tham chiếu đến GitHub của tôi tại đây https://github.com/BStricklin/DataViz.

plot.new() 
library('igraph') 
setwd("D:/Downloads/polnet2016/Data files") 

nodes2 <- read.csv("nodes.csv", header=T, as.is=T) 
links2 <- read.csv("nodeAdjacency.csv", header=T, row.names=1) 

links2 <- as.matrix(links2) 

head(nodes2) 
head(links2) 

net2 <- graph_from_incidence_matrix(links2) 
net2 <- graph_from_adjacency_matrix(links2, mode = "undirected", weighted = TRUE) 
net2 <- simplify(net2, remove.multiple = F, remove.loops = T) 

V(net2)$label <- nodes2$id 

deg <- degree(net2, mode="all") 
V(net2)$size <- deg*3 

#plot(net2) 
#plot(net2, edge.label=round(E(net2)$weight, 3)) 
layout <- layout.reingold.tilford(net2) 
#plot.igraph(net2,vertex.size=3,layout=layout.lgl) 
plot.igraph(net2,vertex.size=3,vertex.label.cex=.5,layout=layout.fruchterman.reingold(net2, niter=10000)) 

EDIT: Đối với bất cứ ai tự hỏi làm thế nào tôi kết thúc việc này, tôi đã phải sử dụng MATLAB và sử dụng biểu đồ và chức năng cốt truyện. Nó trông khó chịu như hình ảnh R, nhưng với một số tùy biến của các nút và việc sử dụng tính năng zoom, nó hoạt động đủ tốt. Tôi vẫn sẽ quan tâm đến việc làm thế nào để làm điều này trong R mặc dù.

+0

Thật thú vị khi thấy một âm mưu ma trận so với biểu đồ https://en.wikipedia.org/wiki/Adjacency_matrix –

+1

Bạn là đúng @ user20650, liên kết là http://kateto.net/network- visualization – Drofdarb

+0

@Zboson nếu bạn truy cập trang github của tôi, nút tệpAdjacency.csv là biểu đồ để nói. Sự khác biệt là ma trận có trọng số hơn là chỉ đơn giản là được lấp đầy hộp như trên trang bạn liên kết đến, số lượng ma trận đại diện cho sức mạnh của các kết nối. – Drofdarb

Trả lời

0

Cố gắng làm cho khu vực âm mưu lớn hơn:

png("network_name.png", width = 15, height = 15, units = "in", res = 300) 
plot.igraph(net2,vertex.size=3, 
vertex.label.cex=.5, 
layout=layout.fruchterman.reingold(net2, niter=10000)) 
dev.off() 
0

Nếu bạn đặt mục tiêu gắn bó với một đại diện như một mạng lưới, người ta phải tối ưu hóa việc bố trí các thông số của thuật toán đồ thị bố trí, trong bạn trường hợp những cái trong trường hợp của bạn là Fruchterman-Reingold để có được bố cục đẹp.

Một giải pháp thay thế sẽ là sử dụng một biểu diễn khác làm ma trận đơn giản, xem "Adjacency matrix plots with R and ggplot2".

Cuối cùng nhưng không kém phần quan trọng, bạn có thể chọn thành phần lớn nhất và vẽ biểu đồ riêng lẻ, đó là cách tôi thường dùng.

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