[英]Adjusting visualization of igraph plot
在這里進行討論之后,我使用igraph
可視化兩個變量( s
和g
)之間的關聯。
在外殼中:
$ 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.