簡體   English   中英

調整igraph圖的可視化

[英]Adjusting visualization of igraph plot

這里進行討論之后,我使用igraph可視化兩個變量( sg )之間的關聯。

在外殼中:

$ cat file
s   g
s1  foo bar
s2  foo bar baz qux
s99 foo
s9999   foo bar baz qux
s99999  foo
s999999 foo

R

m <- as.matrix(read.table(file="~/path_to_file/file", sep="\t", header=T))
g <- graph_from_edgelist(m)
V(g)$type <- bipartite.mapping(g)$type
coords <- layout_as_bipartite(g)
plot.igraph(g, layout = -coords[,2:1],
    vertex.shape="rectangle",
    vertex.size=10,
    vertex.size2=1,
    vertex.color=NA,
    vertex.frame.color=NA,
    vertex.label.color="black",
    vertex.label.family="sans",
    edge.label.color="white",
    edge.arrow.mode=0,
    edge.width=3,
    asp=5)

但是,所得到的可視化效果具有頂點標簽和邊緣重疊,從而使前者難以閱讀。

在此處輸入圖片說明

我想調整R代碼,以使所有頂點標簽都移離頂點中心(即s頂點標簽移到左側, g頂點標簽移到右側),並且所有頂點標簽都向左對齊(並且不居中(默認情況下)。

我可以通過igraph嗎? (如果不可能的話,您會建議使用R另一種可視化策略嗎?)

-

編輯1 :一個有效的解決方案將能夠處理具有眾多頂點的文件,例如file2

在外殼中:

$ cat file2
s   g
foo1    bar01 baz qux
foo2    bar1 baz qux
foo3    bar1 baz qux
foo4    bar1 baz qux
foo5    bar1 baz qux
foo6    bar1 baz qux
foo7    bar1 baz qux
foo8    bar1 baz qux
foo9    bar1 baz qux
foo10   bar1 baz qux
foo11   bar02 baz
foo12   bar2 baz
foo13   bar2 baz
foo14   bar2 baz
foo15   bar2 baz
foo16   bar2 baz
foo17   bar2 baz
foo18   bar2 baz
foo19   bar2 baz
foo20   bar2 baz
foo21   bar03 baz baz qux
foo22   bar3 baz baz qux
foo23   bar3 baz baz qux
foo24   bar3 baz baz qux
foo25   bar3 baz baz qux
foo26   bar3 baz baz qux
foo27   bar3 baz baz qux
foo28   bar3 baz baz qux
foo29   bar3 baz baz qux
foo30   bar3 baz baz qux
foo31   bar04 baz baz qux quux
foo32   bar4 baz baz qux quux
foo33   bar4 baz baz qux quux
foo34   bar4 baz baz qux quux
foo35   bar4 baz baz qux quux
foo36   bar4 baz baz qux quux
foo37   bar4 baz baz qux quux
foo38   bar4 baz baz qux quux
foo39   bar4 baz baz qux quux
foo40   bar4 baz baz qux quux
foo41   bar05 baz qux quux
foo42   bar5 baz qux quux
foo43   bar5 baz qux quux
foo44   bar5 baz qux quux
foo45   bar5 baz qux quux
foo46   bar5 baz qux quux
foo47   bar5 baz qux quux
foo48   bar5 baz qux quux
foo49   bar5 baz qux quux
foo50   bar5 baz qux quux
foo51   bar06 baz qux
foo52   bar6 baz qux
foo53   bar6 baz qux
foo54   bar6 baz qux
foo55   bar6 baz qux
foo56   bar6 baz qux
foo57   bar6 baz qux
foo58   bar6 baz qux
foo59   bar6 baz qux
foo60   bar6 baz qux
foo61   bar07 baz qux quux
foo62   bar7 baz qux quux
foo63   bar7 baz qux quux
foo64   bar7 baz qux quux
foo65   bar7 baz qux quux
foo66   bar7 baz qux quux
foo67   bar7 baz qux quux
foo68   bar7 baz qux quux
foo69   bar7 baz qux quux
foo70   bar7 baz qux quux

即使實施G5W建議的改進(即,分別調整每個頂點的頂點寬度;請參見變量Size1 ),結果圖仍然很難(或幾乎不可能)可視化。 具體而言,在長寬比,頂點高度和頂點寬度之間似乎沒有最佳點。

R

Size1 = 12*nchar(V(g)$name)
plot.igraph(g, layout = -coords[,2:1],
    vertex.shape="rectangle",
    vertex.size=Size1,
    vertex.size2=5,
    vertex.color=NA,
    vertex.frame.color="green",
    vertex.label.color="black",
    vertex.label.family="sans",
    edge.label.color="white",
    edge.arrow.mode=0,
    edge.width=3,
    asp=2.5
    )

在此處輸入圖片說明

這里最大的問題是您的頂點大小。 您可以通過更改當前的plot語句使其具有vertex.frame.color="green"來看到。 如果這樣做,您將看到矩形頂點是文本下方的一個小點。 如果存在包含文本的完整大小的頂點,則可以為該頂點使用白色背景,以遮蓋文本所在的行。 更改頂點大小時,您可能還需要更改縱橫比。

為了使這項工作更好,我根據名稱中的文本量使用了不同大小的矩形。 我正在用白色和白色框架填充的頂點顯示結果,但是請嘗試使用綠色框架(在代碼中但已注釋掉)來嘗試結果,以便您可以看到框的位置。 需要使用這些框來遮蓋到達頂點中心的線。

Size1 = 12*nchar(V(g)$name)
plot.igraph(g, layout = -coords[,2:1],
    vertex.shape="rectangle",
    vertex.size=Size1,
    vertex.size2=30,
    vertex.color=NA,
    ## vertex.frame.color="green",
    vertex.frame.color="white",
    vertex.label.color="black",
    vertex.label.family="sans",
    edge.label.color="white",
    edge.arrow.mode=0,
    edge.width=3,
    asp=1.5)

重新調整

編輯:根據編輯的問題

對於新的更大的示例,我認為您不會獲得真正好的結果,因為您試圖在屏幕上擠得太多。 您試圖顯示堆疊在左側的70個節點,因此充其量最多只能獲得屏幕的1/70-而不是很大的空間。 下面,我減小了字體大小,線寬和邊距。 然后,我重新調整了其他參數,以盡可能地擠壓屏幕。 這僅勉強令人滿意,但我認為如果不從根本上重新設計節點的布局,您將無法獲得更多收益。 左欄中根本沒有更多空間。

新密碼

Size1 = 5.5*nchar(V(g)$name)
par(mar=rep(0.5,4))
plot.igraph(g, layout = -coords[,2:1],
    vertex.shape="rectangle",
    vertex.size=Size1,
    vertex.size2=5,
    vertex.color="white",
#    vertex.frame.color="green",
    vertex.frame.color="white",
    vertex.label.color="black",
    vertex.label.family="sans",
    edge.label.color="white",
    edge.arrow.mode=0,
    edge.width=1,
    asp=2.8,
    vertex.label.cex=0.55, 
    margin=-0.65
    )

重繪圖形

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM