调整igraph图的可视化

时间:2018-02-12 12:43:51

标签: r visualization data-visualization igraph diagram

在讨论here之后,我使用 <View style={{ marginTop: 100, flexDirection: 'row', justifyContent: 'space-between' }}> <View style={{ flex: 1 }}> <View style={{ marginHorizontal: 15 }}> <Text numberOfLines={1}>THIS IS A LONG LONG LONG DESCRIPTION</Text> </View> </View> <View> <Text>9,999,999,999.99</Text> </View> </View> 来可视化两个变量(igraphs)之间的关联。

在shell中:

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

但是,生成的可视化具有顶点标签和边缘重叠,使前者难以阅读。

enter image description here

我想调整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) 的顶点标签向左移动,s的顶点标签向右移动)并且所有顶点标签都是左对齐的(并且不是居中的,默认情况下也是如此)。

我可以通过g这样做,如果是,怎么做? (如果那是不可能的,那么您建议使用igraph中的哪种替代可视化策略?)

-

编辑1 : 一个工作的解决方案将能够处理具有众多椎骨的文件,例如R

在shell中:

file2

即使实现G5W建议的改进(即,单独调整每个顶点的顶点宽度;参见变量$ 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 ),结果图仍然难以(或几乎不可能)可视化。具体来说,宽高比,顶点高度和顶点宽度之间似乎没有甜点

Size1

R

enter image description here

1 个答案:

答案 0 :(得分:0)

这里最大的问题是你的顶点大小。您可以通过更改当前的绘图语句来查看它,使其具有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)

Rescaled

编辑:基于已编辑的问题

通过新的更大的例子,我不认为你可以获得非常好的结果,因为你试图在屏幕上挤得太多。您试图在左侧堆叠显示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
    )

Redrawn graph