2015-04-25 179 views
0

我需要繪製一個圖形,其中所有邊緣都很容易被發現(有標籤),但「igraph」包完全重疊連接兩個頂點的邊,但不要共享源和匯。R - igraph隱藏倒轉源和水槽頂點的邊緣

下面是一個例子。我發現layout.circle很有用,因爲我需要修復圖形的頂點。

library("igraph") 
Edges <- data.frame(from = c(1, 2, 2, 2, 3, 3), 
        to = c(2, 1, 3, 3, 1, 1)) 
g <- graph.edgelist(as.matrix(Edges)) 
plot(g, layout = layout.circle(g, params = list(root = 1)), 
    edge.label = letters[1:6]) 

正如你所看到的,邊緣#1和#2是完全重疊的。 我試圖用edge.curved選項,但結果是令人失望的相同:

plot(g, layout = layout.circle(g, params = list(root = 1)), edge.label = letters[1:6], 
edge.curved = TRUE) 

現在有邊緣的兩對夫婦重疊,而且他們無法辨認。 你知道有什麼方法可以幫助我嗎? 在此先感謝

+0

通過「倒源和匯點」你的意思是邊緣在同一對頂點之間相反的方向?因爲在你的圖表中,這不是你所擁有的。至少在(2,3)和(1,3)之間有兩次完全相同的邊。這就是爲什麼標籤最終會彼此重疊。 –

+0

第一個例子顯示了我需要修復的地方,邊1-> 2和2-> 1重疊。另一個例子是顯示帶有edge.curved的解決方案不起作用。 – indemidelo

回答

1

問題似乎與edge.curved參數使用autocurve.edges函數來計算邊緣曲率。顯然這不能正確識別你的情況。你必須提供自己的一套曲率的選項,這樣你可以嘗試類似以下內容:

E(g)$label <- letters[1:6] 
edges_undir <- t(apply(get.edgelist(g), 1, range)) 
curves <- unlist(lapply(split(E(g)$label, list(edges_undir[,1], edges_undir[,2])), 
        function(x) { seq(0,.5, length.out=length(x))})) 

plot(g, layout = layout.circle(g, params = list(root = 1)), edge.label=E(g)$label, 
    edge.curved = curves) 

這給劇情

enter image description here