可视化无向图这是太大的GraphViz的?可视化无向图这是太大的GraphViz的?(Visuali

2019-05-12 17:42发布

我需要渲染无向图178000个节点50万个边缘建议。 我试过NEATO,郁金香和Cytoscape中。 NEATO甚至不来远程关闭,以及郁金香和Cytoscape的要求,他们可以处理,但似乎不能够。 (郁金香什么也不做,并Cytoscape的声称自己的工作,然后就停止。)

我只是想矢量格式文件(PS或pdf)与所述节点的远程合理的布局。

Answer 1:

的Graphviz本身提供了渲染大图的解决方案。

即,Graphviz的包括sfdp ,FDP的多尺度版本(也graphviz的,类似于NEATO)为大型无向图,其已被用于绘制大图有用的布局在我的项目(70K节点,500k的边缘)。

你可以找到在graphviz的网站本身这个软件文档http://www.graphviz.org/

更多信息,描述的底层技术和示例的纸可以在这里找到: http://yifanhu.net/PUB/graph_draw_small.pdf



Answer 2:

我建议你先做一些数据预处理,例如折叠节点群集,然后可视化集群。 塌陷会降低节点的数量,并且更容易对算法,如镰-河合或Fruchterman-莱因戈尔德以使得到的曲线图。

如果你真的需要形象化500.000节点那么你可以考虑使用一个简单的圆形布局。 这将是很容易使没有问题,基于力的算法有。 看看Circos: http://mkweb.bcgsc.ca/circos/

Circos是由被定制可视化基因组和其他非常庞大而复杂的数据集的生物信息学的人开发的图形可视化。

这是一个基于PERL包,我希望这是没有问题的。



Answer 3:

我已经使用了很好的效果图工具在Python库。 从下面的图有1,490节点和19090个边缘 - 它花了大约5分钟,以使我的笔记本电脑。

图表数据来自亚当和概览中描述的政治博客网“的政治博客和2004年的美国大选” PDF链接在这里 。 如果你在你放大可以看到每个节点的博客网址。

下面是我用来绘制它(博客代码http://ryancompton.net/2014/10/22/stochastic-block-model-based-edge-bundles-in-graph-tool/ ):

import graph_tool.all as gt
import math

g = gt.collection.data["polblogs"] #  http://www2.scedu.unibo.it/roversi/SocioNet/AdamicGlanceBlogWWW.pdf
print(g.num_vertices(), g.num_edges())

#reduce to only connected nodes
g = gt.GraphView(g,vfilt=lambda v: (v.out_degree() > 0) and (v.in_degree() > 0) )
g.purge_vertices()

print(g.num_vertices(), g.num_edges())

#use 1->Republican, 2->Democrat
red_blue_map = {1:(1,0,0,1),0:(0,0,1,1)}
plot_color = g.new_vertex_property('vector<double>')
g.vertex_properties['plot_color'] = plot_color
for v in g.vertices():
    plot_color[v] = red_blue_map[g.vertex_properties['value'][v]]

#edge colors
alpha=0.15
edge_color = g.new_edge_property('vector<double>')
g.edge_properties['edge_color']=edge_color
for e in g.edges():
    if plot_color[e.source()] != plot_color[e.target()]:
        if plot_color[e.source()] == (0,0,1,1):
            #orange on dem -> rep
            edge_color[e] = (255.0/255.0, 102/255.0, 0/255.0, alpha)
        else:
            edge_color[e] = (102.0/255.0, 51/255.0, 153/255.0, alpha)            
    #red on rep-rep edges
    elif plot_color[e.source()] == (1,0,0,1):
        edge_color[e] = (1,0,0, alpha)
    #blue on dem-dem edges
    else:
        edge_color[e] = (0,0,1, alpha)

state = gt.minimize_nested_blockmodel_dl(g, deg_corr=True)
bstack = state.get_bstack()
t = gt.get_hierarchy_tree(bstack)[0]
tpos = pos = gt.radial_tree_layout(t, t.vertex(t.num_vertices() - 1), weighted=True)
cts = gt.get_hierarchy_control_points(g, t, tpos)
pos = g.own_property(tpos)
b = bstack[0].vp["b"]

#labels
text_rot = g.new_vertex_property('double')
g.vertex_properties['text_rot'] = text_rot
for v in g.vertices():
    if pos[v][0] >0:
        text_rot[v] = math.atan(pos[v][1]/pos[v][0])
    else:
        text_rot[v] = math.pi + math.atan(pos[v][1]/pos[v][0])

gt.graph_draw(g, pos=pos, vertex_fill_color=g.vertex_properties['plot_color'], 
            vertex_color=g.vertex_properties['plot_color'],
            edge_control_points=cts,
            vertex_size=10,
            vertex_text=g.vertex_properties['label'],
            vertex_text_rotation=g.vertex_properties['text_rot'],
            vertex_text_position=1,
            vertex_font_size=9,
            edge_color=g.edge_properties['edge_color'],
            vertex_anchor=0,
            bg_color=[0,0,0,1],
            output_size=[4024,4024],
            output='polblogs_blockmodel.png')


Answer 4:

尝试Gephi ,它有一个新的名为布局插件OpenOrd可以扩展到几百万个节点。



Answer 5:

数学,很有可能处理它,但我不得不承认,我的第一反应是沿着评论说,说的台词“拿一张纸和彩色的黑色。” 有没有办法来降低图形的密度是多少?

一个可能的问题是,你似乎在寻找布局,不只是渲染。 我不知道使用多种工具来实现布局的大O特性的了解,但直觉告诉我猜想,这可能需要很长的时间来制定出如此多的数据。



Answer 6:

是否需要真正准确吗?

这取决于你想完成它可能是好东西不够的,只是绘制10%的数据量的1%。 (当然,这也可能是完全无用的,但是这一切都依赖于可视化是什么)



Answer 7:

我希望边缘集群( http://www.visualcomplexity.com/vc/project_details.cfm?id=679&index=679&domain= )会有所帮助。 这种技术包相关的边缘一起,降低了曲线图的视觉复杂度。 您可能需要自己虽然实现算法。



Answer 8:

BioFabric( www.BioFabric.org )是用于可视化大图的另一种工具。 它应该能够处理描述的网络(178,000节点50万个边缘)OK,尽管最初的布局可能需要一段时间。 网络秀在这里(来自斯坦福大学的大型网络DataSet集合)是斯坦福大学的Web网络,其中有281903个节点和2312497个边缘:

BioFabric的可扩展性是由于它代表的节点不是点,而是作为水平线的事实。 然后边缘被示出为垂直线。 有关如何工作的一些直觉,有超快速BioFabric演示 ,这是使用D3动画的小型网络。

主要应用是用Java编写的。 目前,它只能导出PNG图像,而不是PDF文件。 有从PDF导出选项RBioFabric ,虽然这是一个非常简单的实现,不能处理大型网络中呢。

全面披露:BioFabric是一种工具,我写的。



Answer 9:

你可能会提供该文件的消毒版本的这些工具的开发者调试情况下,如果一切都失败了。



Answer 10:

您可以尝试aiSee: http://www.aisee.com/manual/unix/56.htm



Answer 11:

退房的Java / Jython的基于猜测: http://graphexploration.cond.org/



Answer 12:

大型图形布局(LGL)项目帮助了我很多具有类似ptoblem。 它可以处理布局和有一个小的Java应用程序绘制生产布局中的2D。 无载体输出开箱即用,所以你必须要自己绘制的图表(给出的坐标节点通过LGL生产)



Answer 13:

一个Windows工具,可以可视化图形是pajek ,它生成一个EPS输出,但我不知道这是否可以读取数据。



Answer 14:

这里有应用程序的列表: http://www.mkbergman.com/?p=414

海象和LGL是所谓适合大图两个工具。 然而,似乎都需要图表来输入为自己的特殊格式的文本文件,这可能是一个痛苦。



Answer 15:

我不认为你能来远程接近可视化,在一个平坦的布局。

我一直好奇双曲图形,在这一研究论文中描述了一段时间。 尝试从软件SourceForge上 。

另一个想法是刚刚作图使用节点TreeMap中如看到Panopticode 。



Answer 16:

您也可以尝试导航 (披露:我是开发商的软件之一)。 我们已经成功地可视化图形与它有多达170万的边缘。 虽然这样的大型网络很难操作(用户界面将得到laggy)。 但是,它使用OpenGL的可视化等等一些开销转移到显卡。

另外请注意,你必须在文件 - > Preferences对话框杀青内存设置,您可以成功地打开一个网络,大前。

最后,大多数其他答复指出,你有过重新组织你的数据转化为更小,更有意义的更好。



Answer 17:

首先,我想第二aliekens的建议,尝试SFDP。 这是NEATO的大型版本。

作为OJW建议你也可以只情节R2的节点。 您的边缘实际上提供他所谓的“自然排序。” 特别是你可以绘制的归一化图的拉普拉斯的第二个和第三个特征向量的分量。 这是矩阵L在大约谱聚类这个维基百科页面 。 您应该能够写下这个矩阵,而不了解它背后的线性代数。 然后,你已经减少您的问题大约计算大型稀疏矩阵的前几个特征向量。 这在传统的迭代法完成,在标准线性代数软件包实现。 此方法应扩展到非常大的图形。



文章来源: Visualizing Undirected Graph That's Too Large for GraphViz?