2011-09-22 107 views
16

我需要繪製網絡與5個節點和20個向邊(邊緣連接各2個節點),使用R,但我需要兩個特徵存在:R中繪製網絡(控制邊緣厚度加上非重疊邊緣)

  1. 爲了能夠控制每個邊緣的厚度。
  2. 邊緣不被重疊的(即,邊緣形式A到B不繪製在邊緣從B到A)

我花小時尋找一個解決方案,並試圖許多軟件包,但總是有問題。

有人可以提出一個解決方案,並儘可能提供一個完整的例子嗎?

很多預先感謝。

回答

23

如果可以彎曲線條,那麼我知道兩種方法。首先,我創建EdgeList都:

Edges <- data.frame(
    from = rep(1:5,each=5), 
    to = rep(1:5,times=5), 
    thickness = abs(rnorm(25))) 

Edges <- subset(Edges,from!=to) 

這包含原點的在第一列在所述第二和重量在第三節點,目的地節點。你可以使用我的pacake qgraph來繪製一個加權圖。

library("qgraph") 
qgraph(Edges,esize=5,gray=TRUE) 

qgraph

但是這個包是不是真的用於這一目的,你不能改變的邊緣顏色(但,工作:在默認情況下,如果有兩個節點之間的多條邊的邊緣是弧形在上面:) )。你只能讓所有邊緣黑色小竅門:

qgraph(Edges,esize=5,gray=TRUE,minimum=0,cut=.Machine$double.xmin) 

更多的控制,你可以使用的igraph包。首先我們製作圖表:

library("igraph") 
g <- graph.edgelist(as.matrix(Edges[,-3])) 

請注意轉換爲矩陣並減去1,因爲第一個節點爲0。接下來,我們定義佈局:

l <- layout.fruchterman.reingold(g) 

現在我們可以改變一些邊緣參數與E()功能:

# Define edge widths: 
E(g)$width <- Edges$thickness * 5 

# Define arrow widths: 
E(g)$arrow.width <- Edges$thickness * 5 

# Make edges curved: 
E(g)$curved <- 0.2 

最後繪製的圖形:

plot(g,layout=l) 

igraph

+0

非常感謝2種解決方案正在開展工作。 但現在我發現了另一個問題;我繪製了兩個具有相同節點名稱但具有不同邊緣厚度的網絡,同一個節點在每個網絡中具有不同的位置,例如,第一個網絡中的node1繪製在左上角,第二個網絡繪製在頂部對。我需要節點位於同一位置,以便在兩個網絡之間進行直觀比較。你知道解決這個問題的方法嗎? 謝謝 – Pansy

+0

您可以使用固定佈局手動定義節點的位置。在qgraph中,這可以按照以下方式完成:使用'L < - qgraph([arguments])$ layout'存儲一個圖的佈局,然後在'qgraph([arguments],layout = L)'的另一個圖中使用它。在igraph中,您可以保存layour,因爲我已經在上面展示過了,只是在第二個圖表中再次使用它。 –

+0

我不知道爲什麼,但代碼爲'g < - graph.edgelist(as.matrix(Edges [, - 3] -1))'的位產生一個錯誤,如'圖中的錯誤(t(el) ,directed = directed): 在structure_generators.c:84:無效(負)頂點ID,無效頂點ID'任何想法是什麼問題? –

1

該信息包名爲'網絡'可以很好地繪製定向網絡,並處理您的問題。

ex.net <- rbind(c(0, 1, 1, 1), c(1, 0, 0, 1), c(0, 0, 0, 1), c(1, 0, 1, 0)) 

plot(network(ex.net), usecurve = T, edge.curve = 0.00001, 
    edge.lwd = c(4, rep(1, 7))) 

的edge.curve參數,如果設置非常低,並且與usecurve = T結合,分離邊緣上,雖然可能會有這樣做的更直接的方式,和edge.lwd可以採取矢量作爲其不同大小的論據。我承認,這並不總是最好的結果。但是,獲得可以通過多種不同方式定製的體面外觀網絡圖很容易(請參閱?network.plot)。

1

邊緣上的'不重疊'約束是大問題在這裏。首先,你的網絡必須是'平面的',否則在二維中是不可能的(你不能把三個房子連接到沒有交叉的天然氣,電力和電話公司建築物)。

我認爲平面圖佈局算法本質上解決了4色問題。玩得開心。存在啓發式方法,搜索平面圖形佈局,並強制執行,並閱讀Planar Graph Layouts

+0

OP意味着兩個節點之間的邊緣不應該重疊,而不是所有邊緣。 –

+0

啊是的。我只畫一個邊,並在適當的一端或兩端粘上箭頭。任務完成 :) – Spacedman