2016-12-19 13 views
8

視覚的に表現しようとしているかなり大きい(しかしまばらな)隣接行列(500x500)があります。力のあるグラフに似たものが私の最善の策だと思うし、これを実装する最善の方法を見つけようとしている間に、私はRのための複数のリソースに出くわした。最も役に立つのはhttp://kateto.net/network-visualizationのネットワーク可視化であった前にRを使ったことはありません。このような視覚化には多くの便利な機能があるようです。大規模な隣接行列を適切にプロットするR

私は以下のプロットを作成することができましたが、イメージはかなり小さく、ノードは積み重なっています。

enter image description here

PNGとは対照的に、私はPDFに印刷する場合、解像度はわずかに良いですが、私はまだスタッキング問題を抱えています。したがって、私の質問は、これらの問題を解決するために、どのようにRに大きな隣接行列を適切にプロットするかです。

これまでのところ、私のコードは以下の通りです(私のデータをプロットしようとしたいくつかの異なる方法があります)。すべてのヒントを高く評価しています。前もって感謝します。

便宜上、GitHubを参照している2つのファイル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)) 

編集:私はこれをやってしまったか疑問誰のために、私は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

あなたはネットワークとして表現に固執することを目指した場合、1がにあなたの場合には、グラフ・レイアウト・アルゴリズムのレイアウトパラメータを最適化していますかなりのレイアウトを得るためにあなたのケースのものはFruchterman-Reingoldです。

別の解決策は、プレーンマトリックスとして別の表現を使用することです(「Adjacency matrix plots with R and ggplot2」を参照)。

最後に、最大のコンポーネントを選んで、それを別々にプロットすることができます。これは、私が通常行っている方法です。

関連する問題