2016-12-19 2 views
8

У меня есть довольно большая (но довольно разреженная) матрица смежности (500x500), которую я пытаюсь визуально представить. Мне кажется, что что-то похожее на график, ориентированный на силу, - это мой лучший выбор, и, пытаясь найти лучший способ реализовать это, я наткнулся на несколько ресурсов для R. Наиболее полезной была сетевая визуализация на http://kateto.net/network-visualization Хотя я никогда раньше не использовали R, похоже, у него много полезных функций для этого вида визуализации.Правильное построение крупной матрицы смежности в R

Мне удалось создать график ниже, но изображение довольно мало и узлы уложены в стопку.

enter image description here

Разрешение немного лучше, если я печатаю в формате PDF, в отличие от PNG, но я до сих пор проблемы штабелирования. Поэтому мой вопрос заключается в том, как правильно построить крупную матрицу смежности в R для решения этих проблем.

Мой код до сих пор выглядит следующим образом (с несколькими несколькими строками несколько разных способов, которые я попытался построить мои данные). Любые советы приветствуются. Заранее спасибо.

Для удобства я загрузил два файла, на которые ссылается мой GitHub, здесь 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: Для тех, кто интересно, как я в конечном итоге делает это, я должен был использовать MATLAB и использовал граф и сюжетные функции. Он выглядел так же неприятно, как и изображение R, но с некоторой настройкой узлов и использованием функции масштабирования он работал достаточно хорошо. Я все равно был бы заинтересован в том, как это сделать в R.

+0

Было бы интересно посмотреть график матрицы по графику https://en.wikipedia.org/wiki/Adjacency_matrix –

+1

Вы правы @ user20650, ссылка http://kateto.net/network- визуализация – Drofdarb

+0

@Zboson, если вы перейдете на мою страницу github, файл nodeAdjacency.csv - это график, который так сказать. Разница в том, что матрица взвешивается так, а не просто заполняется ящиками, как на странице, с которой вы связаны, номера матрицы представляют силу соединений. – Drofdarb

ответ

0

Попробуйте сделать площадь участка больше:

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

Если вы стремитесь придерживаться представления в сети, необходимо оптимизировать макет-параметров алгоритма граф-макета, в вас дело в вашем случае Fruchterman-Reingold, чтобы получить красивый макет.

Альтернативные решения заключались бы в использовании другого представления в виде простой матрицы, см. «Adjacency matrix plots with R and ggplot2».

И последнее, но не менее важное: вы можете выбрать самый большой компонент и заговорить, что один отдельно, именно так я обычно беру.

Смежные вопросы