调整igraph图的可视化

调整igraph图的可视化,r,visualization,data-visualization,igraph,diagram,R,Visualization,Data Visualization,Igraph,Diagram,在讨论之后,我使用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 $ cat file2 s g foo1 bar01 baz qux foo2 bar1 baz qux foo3 bar1 baz qux foo4 bar1 baz qux foo

在讨论之后,我使用
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
$ 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
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)
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
    )
即使在实施建议的改进时(即,分别调整每个顶点的顶点宽度;请参见变量
Size1
),生成的图形仍然很难(或几乎不可能)可视化。具体而言,纵横比、顶点高度和顶点宽度之间似乎没有一个最佳点

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)
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
    )

这里最大的问题是顶点大小。通过更改当前绘图语句,使其具有
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,而不是很大的空间。下面,我减少了字体大小、线宽和边距。然后我重新调整了其他参数,以便尽可能多地挤压屏幕。这只是稍微令人满意,但我认为如果不从根本上重新设计节点的布局,您就无法获得更多。左栏中没有更多的空间

新代码

谢谢你的建议。是的,应用自定义顶点帧大小(其中大小取决于名称长度)是对代码的重要改进。然而,即使实现了这一改进,我仍然无法形成一个现实的例子(见更新的帖子!)。如何处理现实的examle
file2
?我能想到的最接近的代码如下,但它将顶点堆叠得如此紧密,以至于你无法区分单独的行:
Size1=12*nchar(V(g)$name);plot.igraph(g,layout=-coords[,2:1],vertex.shape=“矩形”,vertex.size=Size1,vertex.size2=5,vertex.color=NA,vertex.frame.color=“绿色”,vertex.label.color=“黑色”,vertex.label.family=“sans”,edge.label.color=“白色”,edge.arrow.mode=0,edge.width=3,asp=2.5)