我需要一些幫助,使用的igraph在R.我有三列的.csv文件入門:創建網絡圖使用的igraph R中
- 第一列由表示「從」的字符串節點
- 第二列是表示「to」節點的字符串,然後是第三列是表示關係強度的Double。
我把文件讀入R,我試着把它變成一個數據幀並用這種方式繪製圖表,但它沒有起作用。 我的最終目標是將這個.csv文件轉換爲加權網絡圖,但我不知道如何開始。
我需要一些幫助,使用的igraph在R.我有三列的.csv文件入門:創建網絡圖使用的igraph R中
我把文件讀入R,我試着把它變成一個數據幀並用這種方式繪製圖表,但它沒有起作用。 我的最終目標是將這個.csv文件轉換爲加權網絡圖,但我不知道如何開始。
這(從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)
一個在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的距離比您預期的要近。這是因爲他們的分離受到大衛與愛麗絲有關的事實的影響。
這個問題很可能會被關閉,或者至少嚴重低估。你沒有提供任何數據或代碼。看看這些發佈指南:http://stackoverflow.com/help/mcve –