2014-05-15 80 views
2

我需要一些幫助,使用的igraph在R.我有三列的.csv文件入門:創建網絡圖使用的igraph R中

  1. 第一列由表示「從」的字符串節點
  2. 第二列是表示「to」節點的字符串,然後是第三列是表示關係強度的Double。

我把文件讀入R,我試着把它變成一個數據幀並用這種方式繪製圖表,但它沒有起作用。 我的最終目標是將這個.csv文件轉換爲加權網絡圖,但我不知道如何開始。

+2

這個問題很可能會被關閉,或者至少嚴重低估。你沒有提供任何數據或代碼。看看這些發佈指南:http://stackoverflow.com/help/mcve –

回答

14

這(從igraph文檔改編爲例)應該讓你開始:

# Load package 
library(igraph) 

# Make up data 
relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David", "David", "Esmeralda"), 
         to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"), 
         weight=c(4,5,5,2,1,1)) 
# Alternatively, you could read in the data from a similar CSV file as follows: 
# relations <- read.csv("relations.csv") 

# Load (DIRECTED) graph from data frame 
g <- graph.data.frame(relations, directed=TRUE) 

# Plot graph 
plot(g, edge.width=E(g)$weight) 

enter image description here

8

一個在igraph的話題,沒有得到足夠的重視是如何控制佈局的問題。在你的情況下,可能你希望節點之間的分離與它們之間關係的強度有關。這可以使用plot.igraph(...)中的layout參數進行控制。

大約有十幾種算法用於計算佈局,但我發現最有用的算法是layout.fruchterman.reingold(...),它基本上將邊緣看作一組彈簧,其彈簧常數由函數的weights參數設置。該算法然後通過允許彈簧達到平衡來固定頂點的位置。這意味着邊緣重量高的頂點通常會更接近。

因此,利用對方的回答中定義的圖表:

par(mfrow=c(1,2)) 
set.seed(1) 
plot(g) 
plot(g,layout=layout.fruchterman.reingold(g,weights=E(g)$weight^3)) 

您可以從右邊的圖中看到,鮑勃,愛麗絲,和塞西爾更接近對方,因爲「他們之間關係的力量」,例如邊緣權重更大(4-5)。由於邊緣權重僅爲1,因此Esmeralda和Alice之間有很大的差距。請注意,由於Bob和David的邊緣權重與Esmeralda和Alice相同,因此Bob和David的距離比您預期的要近。這是因爲他們的分離受到大衛與愛麗絲有關的事實的影響。