“图的绘制 Graph drawing”的版本间的差异

来自集智百科 - 复杂系统|人工智能|复杂科学|复杂网络|自组织
跳到导航 跳到搜索
第1行: 第1行:
−
本词条由Ryan初步翻译
+
{{#seo:
−
由CecileLi初步审校
+
|keywords=图,几何图形,信息可视化
 +
|description=用于对来自社会网络分析、制图学、语言学和生物信息学等各种应用场景进行二维描述
 +
}}
  
 
[[File:WorldWideWebAroundWikipedia.png|thumb|图1:以图的形式展示万维网的一小部分]]
 
[[File:WorldWideWebAroundWikipedia.png|thumb|图1:以图的形式展示万维网的一小部分]]
−
'''图的绘制 Graph drawing'''是数学和计算机科学的一个交叉领域,它结合了[[几何图形理论 geometric graph theory]]和[[信息可视化 information visualization]]的方法,可以用于对来自社会网络分析、制图学、语言学和生物信息学等各种应用场景进行二维描述。<ref>{{harvtxt|Di Battista|Eades|Tamassia|Tollis|1994}}, pp. vii–viii; {{harvtxt|Herman|Melançon|Marshall|2000}}, Section 1.1, "Typical Application Areas".</ref>
+
'''图的绘制 Graph drawing'''是数学和计算机科学的一个交叉领域,它结合了[[几何图形理论 geometric graph theory]]和[[信息可视化 information visualization]]的方法,可以用于对来自社会网络分析、制图学、语言学和生物信息学等各种应用场景进行二维描述。<ref>Di Battista et al. (1994), pp. vii–viii; Herman, Melançon & Marshall (2000), Section 1.1, "Typical Application Areas".</ref>
  
  
−
图形或'''[[网络图 network diagram]]'''的绘制是通过从图形抽象出的顶点和边表示的。这里说的图不应与图形本身混淆:毫不相似的图可以对应于同一个图形。<ref name="dett6">{{harvtxt|Di Battista|Eades|Tamassia|Tollis|1994}}, p. 6.</ref>抽象地说,重要的是哪一对顶点是由边连在一起。然而,在具体的绘图中,这些顶点和边的排列影响了它的可理解性、可用性、制造成本和美学。<ref name="dett-viii"/>如果图形通过添加和删除边缘(动态绘制图形)而随时间变化,并且目的是保存用户的心理映射,那么问题会变得更糟糕。<ref>{{harvtxt|Misue|Eades|Lai|Sugiyama|1995}}</ref>
+
图形或'''[[网络图 network diagram]]'''的绘制是通过从图形抽象出的顶点和边表示的。这里说的图不应与图形本身混淆:毫不相似的图可以对应于同一个图形。<ref name="dett6">Di Battista et al. (1994), p. 6.</ref>抽象地说,重要的是哪一对顶点是由边连在一起。然而,在具体的绘图中,这些顶点和边的排列影响了它的可理解性、可用性、制造成本和美学。<ref name="dett-viii"/>如果图形通过添加和删除边缘(动态绘制图形)而随时间变化,并且目的是保存用户的心理映射,那么问题会变得更糟糕。<ref>Di Battista et al. (1994), p. viii.</ref>
  
  
第17行: 第19行:
  
  
−
在[[有向图]]中,绘图惯例规定用箭头表示它们的方向;<ref name="dett6"/> 然而,用户研究表明,其他惯例(例如,渐缩)可以更有效地提供此信息。<ref>{{harvtxt|Holten|van Wijk|2009}}; {{harvtxt|Holten|Isenberg|van Wijk|Fekete|2011}}.</ref>向上的平面绘图绘图惯例是,每个边都从较低的顶点定向到较高的顶点,因此就不再需要箭头。<ref>{{harvtxt|Garg|Tamassia|1995}}.</ref>
+
在[[有向图]]中,绘图惯例规定用箭头表示它们的方向;<ref name="dett6"/> 然而,用户研究表明,其他惯例(例如,渐缩)可以更有效地提供此信息。<ref>Holten & van Wijk (2009); Holten et al. (2011).</ref>向上的平面绘图绘图惯例是,每个边都从较低的顶点定向到较高的顶点,因此就不再需要箭头。<ref>Garg & Tamassia (1995).</ref>
  
  
第26行: 第28行:
 
:*可见性表示,其中顶点由平面中的区域表示,边缘由彼此无障碍视线的区域表示;  
 
:*可见性表示,其中顶点由平面中的区域表示,边缘由彼此无障碍视线的区域表示;  
 
:*融合图,其中边缘表示为数学火车轨道内的平滑曲线;  
 
:*融合图,其中边缘表示为数学火车轨道内的平滑曲线;  
−
:*织物,其中节点表示为水平线,边缘表示为垂直线;<ref name="Longabaugh 2012">{{harvtxt|Longabaugh|2012}}.</ref>
+
:*织物,其中节点表示为水平线,边缘表示为垂直线;<ref name="Longabaugh 2012">Longabaugh (2012).</ref>
 
:*图表的[[邻接矩阵]]的可视化。
 
:*图表的[[邻接矩阵]]的可视化。
  
第32行: 第34行:
 
== 质量度量 Quality measures==
 
== 质量度量 Quality measures==
  
−
为了找到客观评价图形美观性和可用性的方法,我们定义了许多不同的图形质量度量方法。<ref>{{harvtxt|Di Battista|Eades|Tamassia|Tollis|1994}}, Section 2.1.2, Aesthetics, pp. 14–16; {{harvtxt|Purchase|Cohen|James|1997}}.</ref>除了用于指导对同一图形的不同布局方法之间的选择之外,某些布局方法还尝试直接优化度量方式。
+
为了找到客观评价图形美观性和可用性的方法,我们定义了许多不同的图形质量度量方法。<ref>Di Battista et al. (1994), Section 2.1.2, Aesthetics, pp. 14–16; Purchase, Cohen & James (1997).</ref>除了用于指导对同一图形的不同布局方法之间的选择之外,某些布局方法还尝试直接优化度量方式。
  
 
[[File:4node-digraph-embed.svg|upright=0.5|thumb|图3:没有重叠边的平面图]]
 
[[File:4node-digraph-embed.svg|upright=0.5|thumb|图3:没有重叠边的平面图]]
  
  
−
*图的'''交叉数 Crossing number'''是相交的成对的边的数目。如果图形是平面的,那么我们通常可以方便地画出没有任何边缘相交的图形;也就是说,在本例中,图形绘制表示'''<font color="#ff8000">图形嵌入 Graph embedding</font>'''。然而,实际应用中经常出现非平面图,因此图形绘制算法通常必须考虑边缘交叉。<ref>{{harvtxt|Di Battista|Eades|Tamassia|Tollis|1994}}, p 14.</ref>
+
*图的'''交叉数 Crossing number'''是相交的成对的边的数目。如果图形是平面的,那么我们通常可以方便地画出没有任何边缘相交的图形;也就是说,在本例中,图形绘制表示'''<font color="#ff8000">图形嵌入 Graph embedding</font>'''。然而,实际应用中经常出现非平面图,因此图形绘制算法通常必须考虑边缘交叉。<ref>Di Battista et al. (1994), p 14.</ref>
  
 
*一个图形的面积是它的最小'''<font color="#ff8000">边界盒 bounding box</font>'''的大小,与任意两个顶点之间的最近距离有关。面积小的图通常比面积大的图更可取,因为它们可以让图画的特征以更大的尺寸显示,从而更醒目。当然,边框的纵横比也很重要。
 
*一个图形的面积是它的最小'''<font color="#ff8000">边界盒 bounding box</font>'''的大小,与任意两个顶点之间的最近距离有关。面积小的图通常比面积大的图更可取,因为它们可以让图画的特征以更大的尺寸显示,从而更醒目。当然,边框的纵横比也很重要。
  
−
*对称显示的问题是在给定的图形中找到'''<font color="#ff8000">对称组 Symmetry Groups</font>''',并找到尽可能多地显示对称的绘图。一些布局方法自动形成对称图形;另外,一些绘图方法从查找输入图形中的对称性开始,并使用它们来构造绘图。<ref>{{harvtxt|Di Battista|Eades|Tamassia|Tollis|1994}}, p. 16.</ref>
+
*对称显示的问题是在给定的图形中找到'''<font color="#ff8000">对称组 Symmetry Groups</font>''',并找到尽可能多地显示对称的绘图。一些布局方法自动形成对称图形;另外,一些绘图方法从查找输入图形中的对称性开始,并使用它们来构造绘图。<ref>Di Battista et al. (1994),p. 16.</ref>
  
 
*重要的是,边缘的形状要尽可能简单,以便更容易循着它们的轨迹观察。在折线图中,一条边的复杂性可以通过它的弯曲数来衡量,多数方法的目的是提供很少的总弯曲或每条边很少弯曲的图。类似地,对于样条曲线,边的复杂性可以通过边上控制点的数量来度量。
 
*重要的是,边缘的形状要尽可能简单,以便更容易循着它们的轨迹观察。在折线图中,一条边的复杂性可以通过它的弯曲数来衡量,多数方法的目的是提供很少的总弯曲或每条边很少弯曲的图。类似地,对于样条曲线,边的复杂性可以通过边上控制点的数量来度量。
第47行: 第49行:
 
*几种常用的质量度量方法与边的长度有关:通常需要最小化边的总长度以及任何边的最大长度。此外,最好使边缘的长度一致而不是差别很大。
 
*几种常用的质量度量方法与边的长度有关:通常需要最小化边的总长度以及任何边的最大长度。此外,最好使边缘的长度一致而不是差别很大。
  
−
*'''<font color="#ff8000">角度分辨率 Angular resolution</font>'''是图形绘制中最小的锐角的度数。如果一个图的顶点高度高,那么它的角分辨率就很小,但是角分辨率也可以由角的函数来限定。<ref name="ps09">{{harvtxt|Pach|Sharir|2009}}.</ref>
+
*'''<font color="#ff8000">角度分辨率 Angular resolution</font>'''是图形绘制中最小的锐角的度数。如果一个图的顶点高度高,那么它的角分辨率就很小,但是角分辨率也可以由角的函数来限定。<ref name="ps09">Pach & Sharir (2009).</ref>
  
 
*图的'''<font color="#ff8000">斜率 slope number</font>'''是在具有直线段边(允许交叉)的图中所需的明显边缘斜率的最小值。'''<font color="#ff8000">三次图 Cubic Graphs</font>'''的斜率最大为4,五次图的斜率数可能是无界的,但四次的图的斜率是否有界仍然有待求证的。<ref name="ps09"/>
 
*图的'''<font color="#ff8000">斜率 slope number</font>'''是在具有直线段边(允许交叉)的图中所需的明显边缘斜率的最小值。'''<font color="#ff8000">三次图 Cubic Graphs</font>'''的斜率最大为4,五次图的斜率数可能是无界的,但四次的图的斜率是否有界仍然有待求证的。<ref name="ps09"/>
第59行: 第61行:
 
有许多不同的图形布局方法,如下
 
有许多不同的图形布局方法,如下
  
−
*在'''<font color="#ff8000">基于力的布局系统 Force-Based Layout</font>'''中,图形绘制软件根据基于弹簧系统或分子力学的物理隐含的力系统,不断移动顶点来修改初始顶点的位置。通常,这些系统将相邻顶点之间的吸引力与所有对顶点之间的排斥力结合起来,以寻求一种边长较小而顶点分离良好的布局。这些系统可以执行'''<font color="#ff8000">梯度下降 gradient descent</font>'''最小化的能量函数,或可以把力直接转化为节点的速度或加速度。<ref>{{harvtxt|Di Battista|Eades|Tamassia|Tollis|1994}}, Section 2.7, "The Force-Directed Approach", pp. 29–30, and Chapter 10, "Force-Directed Methods", pp. 303–326.</ref>
+
*在'''<font color="#ff8000">基于力的布局系统 Force-Based Layout</font>'''中,图形绘制软件根据基于弹簧系统或分子力学的物理隐含的力系统,不断移动顶点来修改初始顶点的位置。通常,这些系统将相邻顶点之间的吸引力与所有对顶点之间的排斥力结合起来,以寻求一种边长较小而顶点分离良好的布局。这些系统可以执行'''<font color="#ff8000">梯度下降 gradient descent</font>'''最小化的能量函数,或可以把力直接转化为节点的速度或加速度。<ref>Di Battista et al. (1994), Section 2.7, "The Force-Directed Approach", pp. 29–30, and Chapter 10, "Force-Directed Methods", pp. 303–326.</ref>
  
−
*'''<font color="#ff8000">频谱布局法 Spectral layout</font>''',以从图的[[邻接矩阵]]派生的矩阵(例如Laplacian)的'''<font color="#ff8000">特征向量 Eigenvector</font>'''作为坐标。<ref>{{harvtxt|Beckman|1994}}; {{harvtxt|Koren|2005}}.</ref>
+
*'''<font color="#ff8000">频谱布局法 Spectral layout</font>''',以从图的[[邻接矩阵]]派生的矩阵(例如Laplacian)的'''<font color="#ff8000">特征向量 Eigenvector</font>'''作为坐标。<ref>Beckman (1994); Koren (2005).</ref>
  
−
*'''正交布局法 Orthogonal layout methods''',允许图形的边缘水平或垂直运行,平行于布局的坐标轴。这些方法最初是为超大规模集成电路和PCB布局问题而设计的,但它们也适用于图形绘制。它们通常涉及到一种多阶段的方法,通过用顶点替换交叉点来平面化输入图,找到一个平面化图的拓扑嵌入,选择边的方向来最小化弯曲,顶点的放置始终与这些方向一致,最后一个布局压缩阶段减少图形面积。<ref>{{harvtxt|Di Battista|Eades|Tamassia|Tollis|1994}}, Chapter 5, "Flow and Orthogonal Drawings", pp. 137–170; {{harv|Eiglsperger|Fekete|Klau|2001}}.</ref>
+
*'''正交布局法 Orthogonal layout methods''',允许图形的边缘水平或垂直运行,平行于布局的坐标轴。这些方法最初是为超大规模集成电路和PCB布局问题而设计的,但它们也适用于图形绘制。它们通常涉及到一种多阶段的方法,通过用顶点替换交叉点来平面化输入图,找到一个平面化图的拓扑嵌入,选择边的方向来最小化弯曲,顶点的放置始终与这些方向一致,最后一个布局压缩阶段减少图形面积。<ref>Di Battista et al. (1994), Chapter 5, "Flow and Orthogonal Drawings", pp. 137–170; (Eiglsperger, Fekete & Klau 2001).</ref>
  
−
*'''树形布局'''算法显示了一种类似树的根状结构,适合树。通常,在一种称为'''气球布局'''的技术中,树形图每个节点的子节点被画在围绕该节点的圆上,这些圆的半径在树的较低层次上递减,因此这些圆不会重叠。<ref>{{harvtxt|Herman|Melançon|Marshall|2000}}, Section 2.2, "Traditional Layout – An Overview".</ref>
+
*'''树形布局'''算法显示了一种类似树的根状结构,适合树。通常,在一种称为'''气球布局'''的技术中,树形图每个节点的子节点被画在围绕该节点的圆上,这些圆的半径在树的较低层次上递减,因此这些圆不会重叠。<ref> Herman, Melançon & Marshall (2000), Section 2.2, "Traditional Layout – An Overview".</ref>
  
−
*'''<font color="#ff8000">分层图绘制方法 Layered graph drawing</font>'''(通常称为'''杉山式图 Sugiyama-style drawing''')最适合于'''<font color="#ff8000">有向无环图 directed acyclic graphs</font>'''或接近无环的图,例如软件系统中模块或函数之间的依赖关系图。在这些方法中,图的节点使用Coffman Graham算法等方法被安排到水平层中,以这样的方式,大多数边从一层向下到下一层;在这一步之后,将每一层内的节点进行排列,使交叉最少。<ref>{{harvtxt|Sugiyama|Tagawa|Toda|1981}}; {{harvtxt|Bastert|Matuszewski|2001}}; {{harvtxt|Di Battista|Eades|Tamassia|Tollis|1994}}, Chapter 9, "Layered Drawings of Digraphs", pp. 265–302.</ref>
+
*'''<font color="#ff8000">分层图绘制方法 Layered graph drawing</font>'''(通常称为'''杉山式图 Sugiyama-style drawing''')最适合于'''<font color="#ff8000">有向无环图 directed acyclic graphs</font>'''或接近无环的图,例如软件系统中模块或函数之间的依赖关系图。在这些方法中,图的节点使用Coffman Graham算法等方法被安排到水平层中,以这样的方式,大多数边从一层向下到下一层;在这一步之后,将每一层内的节点进行排列,使交叉最少。<ref>Sugiyama, Tagawa & Toda (1981); Bastert & Matuszewski (2001); Di Battista et al. (1994), Chapter 9, "Layered Drawings of Digraphs", pp. 265–302.</ref>
  
 
[[File:Goldner-Harary-linear.svg|thumb|图5:弧线图]]
 
[[File:Goldner-Harary-linear.svg|thumb|图5:弧线图]]
−
*'''<font color="#ff8000">弧线图 Arc Diagram</font>''',这种布局风格可以追溯到20世纪60年代,将顶点放在一条直线上;边缘可以画成在直线上方或下方的半圆,也可以画成由多个半圆连接在一起的光滑曲线。
+
*'''<font color="#ff8000">弧线图 Arc Diagram</font>''',这种布局风格可以追溯到20世纪60年代,<ref>Saaty (1964).</ref>{将顶点放在一条直线上;边缘可以画成在直线上方或下方的半圆,也可以画成由多个半圆连接在一起的光滑曲线。
  
−
*'''<font color="#ff8000">圆形布局法 Circular Layout</font>'''将图形的顶点放置在一个圆上,仔细选择圆周上顶点的顺序,以减少交叉,并将相邻的顶点放置在彼此接近的位置。边可以画成圆的弦,也可以画成圆内外的弧线。在某些情况下,可以使用多个圆。<ref>{{harvtxt|Doğrusöz|Madden|Madden|1997}}.</ref>
+
*'''<font color="#ff8000">圆形布局法 Circular Layout</font>'''将图形的顶点放置在一个圆上,仔细选择圆周上顶点的顺序,以减少交叉,并将相邻的顶点放置在彼此接近的位置。边可以画成圆的弦,也可以画成圆内外的弧线。在某些情况下,可以使用多个圆。<ref>Doğrusöz, Madden & Madden (1997).</ref>
  
−
*'''<font color="#ff8000">优势图 Dominance drawing</font>'''当且仅当一个顶点可以从另一个顶点到达时,画顶点的最优方式是:一个顶点向上,或向右,或两个顶点同时向上。这样,布局风格使得图的可达性关系在视觉上变得明显。<ref>{{harvtxt|Di Battista|Eades|Tamassia|Tollis|1994}}, Section 4.7, "Dominance Drawings", pp. 112–127.</ref>
+
*'''<font color="#ff8000">优势图 Dominance drawing</font>'''当且仅当一个顶点可以从另一个顶点到达时,画顶点的最优方式是:一个顶点向上,或向右,或两个顶点同时向上。这样,布局风格使得图的可达性关系在视觉上变得明显。<ref>Di Battista et al. (1994), Section 4.7, "Dominance Drawings", pp. 112–127.</ref>
  
 
<br>
 
<br>
第82行: 第84行:
 
在其他应用领域出现的图和图绘制包括:
 
在其他应用领域出现的图和图绘制包括:
  
−
* '''社会图 Sociogram''',社会网络图,通常由社会网络分析软件提供;<ref>{{Harvard citation text|Scott|2000}}; {{Harvard citation text|Brandes|Freeman|Wagner|2014}}.</ref>
+
* '''社会图 Sociogram''',社会网络图,通常由社会网络分析软件提供;<ref>Scott (2000); Brandes, Freeman & Wagner (2014).</ref>
  
−
* '''<font color="#ff8000">哈塞图 Hasse diagram</font>''',一种专门用于部分顺序的图形绘制<ref>{{Harvard citation text|Di Battista|Eades|Tamassia|Tollis|1994}}, pp. 15–16, and Chapter 6, "Flow and Upward Planarity", pp. 171–214; {{Harvard citation text|Freese|2004}};</ref>
+
* '''<font color="#ff8000">哈塞图 Hasse diagram</font>''',一种专门用于部分顺序的图形绘制<ref>Di Battista et al. (1994), pp. 15–16, and Chapter 6, "Flow and Upward Planarity", pp. 171–214; Freese (2004).</ref>
  
−
* '''<font color="#ff8000">Dessin d'enfants</font>'',代数几何中使用的一种图形画法;{{sfnp|Zapponi|2003}}
+
* '''<font color="#ff8000">Dessin d'enfants</font>'',代数几何中使用的一种图形画法;<ref>Zapponi (2003).</ref>
  
−
*'''状态图 State diagram''',有限状态机的图形表示;{{sfnp|Anderson|Head|2006}}
+
*'''状态图 State diagram''',有限状态机的图形表示;<ref>Anderson & Head (2006).</ref>
  
−
*'''计算机网络图 Computer network diagram''',描述计算机网络中的节点和连接;{{sfnp|Di Battista|Rimondini|2014}}
+
*'''计算机网络图 Computer network diagram''',描述计算机网络中的节点和连接;<ref>Di Battista & Rimondini (2014).</ref>
  
 
* '''流程图 Flowchart'''和'''<font color="#ff8000">drakon 图</font>''',其中节点表示算法的步骤,边表示步骤之间的控制流的绘图;
 
* '''流程图 Flowchart'''和'''<font color="#ff8000">drakon 图</font>''',其中节点表示算法的步骤,边表示步骤之间的控制流的绘图;
第96行: 第98行:
 
*'''数据流程图 Data-Flow Diagram''',其中节点表示信息系统的组件,边缘表示信息从一个组件到另一个组件的移动;
 
*'''数据流程图 Data-Flow Diagram''',其中节点表示信息系统的组件,边缘表示信息从一个组件到另一个组件的移动;
  
−
* 生物信息学包括系统发育树,蛋白质,蛋白质相互作用网络,和代谢途径。{{sfnp|Bachmaier|Brandes|Schreiber|2014}}
+
* 生物信息学包括系统发育树,蛋白质,蛋白质相互作用网络,和代谢途径。<ref>Bachmaier, Brandes & Schreiber (2014).</ref>
  
  
第104行: 第106行:
 
==软件==
 
==软件==
  
−
[[File:Gephi 0.9.1 Network Analysis and Visualization Software.png|thumb|图6:A graph drawing interface 一个画图软件界面([[Gephi]] 0.9.1)]]
+
[[File:Gephi 0.9.1 Network Analysis and Visualization Software.png|thumb|图6:Gephi 0.9.1界面]]
  
 
软件、系统和绘制图形系统的提供者包括:
 
软件、系统和绘制图形系统的提供者包括:
−
 
−
<!-- DO ''not'' INCLUDE AN ENTRY HERE UNLESS IT ALREADY HAS A BLUE-LINKED ARTICLE -->
 
−
 
−
<!-- DO not INCLUDE AN ENTRY HERE UNLESS IT ALREADY HAS A BLUE-LINKED ARTICLE -->
 
−
 
  
 
* BioFabric:开源软件,用于将节点绘制为水平线来可视化大型网络。
 
* BioFabric:开源软件,用于将节点绘制为水平线来可视化大型网络。
第121行: 第118行:
 
* Graph-Tool:一个免费/免费的Python库,用于分析图形
 
* Graph-Tool:一个免费/免费的Python库,用于分析图形
  
−
* Graphviz:来自美国电话电报公司的开放源码绘图系统<ref>"Graphviz and Dynagraph – Static and Dynamic Graph Drawing Tools", by John Ellson, Emden R. Gansner, Eleftherios Koutsofios, Stephen C. North, and Gordon Woodhull, in {{harvtxt| Jünger|Mutzel|2004}}.</ref>
+
* Graphviz:来自美国电话电报公司的开放源码绘图系统<ref>"Graphviz and Dynagraph – Static and Dynamic Graph Drawing Tools", by John Ellson, Emden R. Gansner, Eleftherios Koutsofios, Stephen C. North, and Gordon Woodhull, in Jünger & Mutzel (2004).</ref>
  
 
* Linkurious:图形数据库的商业网络分析和可视化软件
 
* Linkurious:图形数据库的商业网络分析和可视化软件
第127行: 第124行:
 
* Mathematica:一个通用的计算工具,包括2D和3D图形可视化和图形分析工具。<ref>[http://reference.wolfram.com/mathematica/ref/GraphPlot.html GraphPlot] Mathematica documentation</ref><ref>[http://reference.wolfram.com/mathematica/tutorial/GraphDrawingIntroduction.html Graph drawing tutorial]</ref>
 
* Mathematica:一个通用的计算工具,包括2D和3D图形可视化和图形分析工具。<ref>[http://reference.wolfram.com/mathematica/ref/GraphPlot.html GraphPlot] Mathematica documentation</ref><ref>[http://reference.wolfram.com/mathematica/tutorial/GraphDrawingIntroduction.html Graph drawing tutorial]</ref>
  
−
* Microsoft Automatic Graph Layout:用于图表布局的开放源码。net库(以前称为GLEE)
+
* Microsoft Automatic Graph Layout:用于图表布局的开放源码net库(以前称为GLEE)<ref> Nachmanson, Robertson & Lee (2008).</ref>
  
−
* NetworkX:用于研究图和网络的Python库
+
* NetworkX:用于研究图和网络的Python库<ref></ref>
  
−
* Tom Sawyer Perspectives:是一款基于图形的软件,用于构建企业级图形和数据可视化和分析应用程序。它是一个软件开发工具包(SDK),具有基于图形的设计和预览环境
+
* Tom Sawyer Perspectives:<ref>Madden et al. (1996).</ref>是一款基于图形的软件,用于构建企业级图形和数据可视化和分析应用程序。它是一个软件开发工具包(SDK),具有基于图形的设计和预览环境<ref></ref>
  
−
* [[Tulip (software)]],an open source data visualization tool
+
* Tulip:<ref>"Tulip – A Huge Graph Visualization Framework", by David Auber, in Jünger & Mutzel (2004).</ref> 开源数据可视化工具
−
Tulip :<ref>"Tulip – A Huge Graph Visualization Framework", by David Auber, in {{harvtxt| Jünger|Mutzel|2004}}.</ref> 开源数据可视化工具
 
  
−
* yEd 具有图形布局功能的图形编辑器<ref>"yFiles – Visualization and Automatic Layout of Graphs", by Roland Wiese, Markus Eiglsperger, and Michael Kaufmann, in {{harvtxt| Jünger|Mutzel|2004}}</ref>
+
* yEd 具有图形布局功能的图形编辑器<ref>"yFiles – Visualization and Automatic Layout of Graphs", by Roland Wiese, Markus Eiglsperger, and Michael Kaufmann, in Jünger & Mutzel (2004).</ref>
  
−
* PGF/TikZ 带graphdrawing软件包的3.0(需要LuaTeX)<ref>{{harvtxt|Tantau|2013}}; see also the older [http://www.tcs.uni-luebeck.de/downloads/mitarbeiter/tantau/2012-gd-presentation.pdf GD 2012 presentation]</ref>
+
* PGF/TikZ 带graphdrawing软件包的3.0(需要LuaTeX)<ref>Tantau (2013); 详见[http://www.tcs.uni-luebeck.de/downloads/mitarbeiter/tantau/2012-gd-presentation.pdf GD 2012 presentation]</ref>
  
 
* LaNet-vi:开源大型网络可视化软件
 
* LaNet-vi:开源大型网络可视化软件
第155行: 第151行:
 
*{{citation | doi = 10.1109/2945.841119| last1 = Herman | first1 = Ivan | last2 = Melançon | first2 = Guy | last3 = Marshall | first3 = M. Scott | journal = IEEE Transactions on Visualization and Computer Graphics | pages = 24–43| title = Graph Visualization and Navigation in Information Visualization: A Survey | issue = 1 | volume = 6 | year = 2000 }}.
 
*{{citation | doi = 10.1109/2945.841119| last1 = Herman | first1 = Ivan | last2 = Melançon | first2 = Guy | last3 = Marshall | first3 = M. Scott | journal = IEEE Transactions on Visualization and Computer Graphics | pages = 24–43| title = Graph Visualization and Navigation in Information Visualization: A Survey | issue = 1 | volume = 6 | year = 2000 }}.
 
*{{citation | last1 = Jünger | first1 = Michael | last2 = Mutzel | first2 = Petra  | isbn = 978-3-540-00881-1 | publisher = Springer-Verlag| title = Graph Drawing Software | year = 2004}}.
 
*{{citation | last1 = Jünger | first1 = Michael | last2 = Mutzel | first2 = Petra  | isbn = 978-3-540-00881-1 | publisher = Springer-Verlag| title = Graph Drawing Software | year = 2004}}.
−
citation|title=Drawing Graphs: Methods and Models|editor1-first=Michael|editor1-last=Kaufmann|editor2-first=Dorothea|editor2-last=Wagner|publisher=Springer-Verlag|series=[[Lecture Notes in Computer Science]]|volume=2025|year=2001|doi=10.1007/3-540-44969-8|isbn=978-3-540-42062-0}}.
+
citation|title=Drawing Graphs: Methods and Models|editor1-first=Michael|editor1-last=Kaufmann|editor2-first=Dorothea|editor2-last=Wagner|publisher=Springer-Verlag|series=Lecture Notes in Computer Science|volume=2025|year=2001|doi=10.1007/3-540-44969-8|isbn=978-3-540-42062-0}}.
 
citation|editor-first=Roberto|editor-last=Tamassia|editor-link=Roberto Tamassia|title=Handbook of Graph Drawing and Visualization|publisher=CRC Press|url=http://cs.brown.edu/~rt/gdhandbook/|year=2014|access-date=2013-08-28|archive-url=https://web.archive.org/web/20130815181243/http://cs.brown.edu/~rt/gdhandbook/|archive-date=2013-08-15|url-status=dead}}.
 
citation|editor-first=Roberto|editor-last=Tamassia|editor-link=Roberto Tamassia|title=Handbook of Graph Drawing and Visualization|publisher=CRC Press|url=http://cs.brown.edu/~rt/gdhandbook/|year=2014|access-date=2013-08-28|archive-url=https://web.archive.org/web/20130815181243/http://cs.brown.edu/~rt/gdhandbook/|archive-date=2013-08-15|url-status=dead}}.
  

2020年11月22日 (日) 01:14的版本


图1:以图的形式展示万维网的一小部分

图的绘制 Graph drawing是数学和计算机科学的一个交叉领域,它结合了几何图形理论 geometric graph theory和信息可视化 information visualization的方法,可以用于对来自社会网络分析、制图学、语言学和生物信息学等各种应用场景进行二维描述。[1]


图形或网络图 network diagram的绘制是通过从图形抽象出的顶点和边表示的。这里说的图不应与图形本身混淆:毫不相似的图可以对应于同一个图形。[2]抽象地说,重要的是哪一对顶点是由边连在一起。然而,在具体的绘图中,这些顶点和边的排列影响了它的可理解性、可用性、制造成本和美学。[3]如果图形通过添加和删除边缘(动态绘制图形)而随时间变化,并且目的是保存用户的心理映射,那么问题会变得更糟糕。[4]


绘图惯例 Graphical conventions

图2:带箭头显示边方向的有向图

图经常绘制成节点链接图,其中顶点可以是为圆框、方框或文本标签,边表示为欧式平面 Euclidean Plane上的线段、折线或曲线。[3]节点链接图可以追溯到13世纪雷蒙·卢尔 Ramon Llull的作品,他为得到完全图,绘制了这种类型的图,以便分析形而上学概念集合之间的所有成对组合。[5]


在有向图中,绘图惯例规定用箭头表示它们的方向;[2] 然而,用户研究表明,其他惯例(例如,渐缩)可以更有效地提供此信息。[6]向上的平面绘图绘图惯例是,每个边都从较低的顶点定向到较高的顶点,因此就不再需要箭头。[7]


节点链接图的替代约定包括:

  • 邻接表示,例如圆堆积 circle packings,其中,顶点由平面中的不相交区域表示,边缘由区域之间的邻接表示;
  • 交点表示,其中顶点由不相交的几何对象表示,而边线由其交点表示;
  • 可见性表示,其中顶点由平面中的区域表示,边缘由彼此无障碍视线的区域表示;
  • 融合图,其中边缘表示为数学火车轨道内的平滑曲线;
  • 织物,其中节点表示为水平线,边缘表示为垂直线;[8]
  • 图表的邻接矩阵的可视化。


质量度量 Quality measures

为了找到客观评价图形美观性和可用性的方法,我们定义了许多不同的图形质量度量方法。[9]除了用于指导对同一图形的不同布局方法之间的选择之外,某些布局方法还尝试直接优化度量方式。

图3:没有重叠边的平面图


  • 图的交叉数 Crossing number是相交的成对的边的数目。如果图形是平面的,那么我们通常可以方便地画出没有任何边缘相交的图形;也就是说,在本例中,图形绘制表示图形嵌入 Graph embedding。然而,实际应用中经常出现非平面图,因此图形绘制算法通常必须考虑边缘交叉。[10]
  • 一个图形的面积是它的最小边界盒 bounding box的大小,与任意两个顶点之间的最近距离有关。面积小的图通常比面积大的图更可取,因为它们可以让图画的特征以更大的尺寸显示,从而更醒目。当然,边框的纵横比也很重要。
  • 对称显示的问题是在给定的图形中找到对称组 Symmetry Groups,并找到尽可能多地显示对称的绘图。一些布局方法自动形成对称图形;另外,一些绘图方法从查找输入图形中的对称性开始,并使用它们来构造绘图。[11]
  • 重要的是,边缘的形状要尽可能简单,以便更容易循着它们的轨迹观察。在折线图中,一条边的复杂性可以通过它的弯曲数来衡量,多数方法的目的是提供很少的总弯曲或每条边很少弯曲的图。类似地,对于样条曲线,边的复杂性可以通过边上控制点的数量来度量。
  • 几种常用的质量度量方法与边的长度有关:通常需要最小化边的总长度以及任何边的最大长度。此外,最好使边缘的长度一致而不是差别很大。
  • 角度分辨率 Angular resolution是图形绘制中最小的锐角的度数。如果一个图的顶点高度高,那么它的角分辨率就很小,但是角分辨率也可以由角的函数来限定。[12]
  • 图的斜率 slope number是在具有直线段边(允许交叉)的图中所需的明显边缘斜率的最小值。三次图 Cubic Graphs的斜率最大为4,五次图的斜率数可能是无界的,但四次的图的斜率是否有界仍然有待求证的。[12]


布局方法 Layout methods

图4:基于力的网络可视化 [13]

有许多不同的图形布局方法,如下

  • 在基于力的布局系统 Force-Based Layout中,图形绘制软件根据基于弹簧系统或分子力学的物理隐含的力系统,不断移动顶点来修改初始顶点的位置。通常,这些系统将相邻顶点之间的吸引力与所有对顶点之间的排斥力结合起来,以寻求一种边长较小而顶点分离良好的布局。这些系统可以执行梯度下降 gradient descent最小化的能量函数,或可以把力直接转化为节点的速度或加速度。[14]
  • 频谱布局法 Spectral layout,以从图的邻接矩阵派生的矩阵(例如Laplacian)的特征向量 Eigenvector作为坐标。[15]
  • 正交布局法 Orthogonal layout methods,允许图形的边缘水平或垂直运行,平行于布局的坐标轴。这些方法最初是为超大规模集成电路和PCB布局问题而设计的,但它们也适用于图形绘制。它们通常涉及到一种多阶段的方法,通过用顶点替换交叉点来平面化输入图,找到一个平面化图的拓扑嵌入,选择边的方向来最小化弯曲,顶点的放置始终与这些方向一致,最后一个布局压缩阶段减少图形面积。[16]
  • 树形布局算法显示了一种类似树的根状结构,适合树。通常,在一种称为气球布局的技术中,树形图每个节点的子节点被画在围绕该节点的圆上,这些圆的半径在树的较低层次上递减,因此这些圆不会重叠。[17]
  • 分层图绘制方法 Layered graph drawing(通常称为杉山式图 Sugiyama-style drawing)最适合于有向无环图 directed acyclic graphs或接近无环的图,例如软件系统中模块或函数之间的依赖关系图。在这些方法中,图的节点使用Coffman Graham算法等方法被安排到水平层中,以这样的方式,大多数边从一层向下到下一层;在这一步之后,将每一层内的节点进行排列,使交叉最少。[18]
图5:弧线图
  • 弧线图 Arc Diagram,这种布局风格可以追溯到20世纪60年代,[19]{将顶点放在一条直线上;边缘可以画成在直线上方或下方的半圆,也可以画成由多个半圆连接在一起的光滑曲线。
  • 圆形布局法 Circular Layout将图形的顶点放置在一个圆上,仔细选择圆周上顶点的顺序,以减少交叉,并将相邻的顶点放置在彼此接近的位置。边可以画成圆的弦,也可以画成圆内外的弧线。在某些情况下,可以使用多个圆。[20]
  • 优势图 Dominance drawing当且仅当一个顶点可以从另一个顶点到达时,画顶点的最优方式是:一个顶点向上,或向右,或两个顶点同时向上。这样,布局风格使得图的可达性关系在视觉上变得明显。[21]


专用图

在其他应用领域出现的图和图绘制包括:

  • 社会图 Sociogram,社会网络图,通常由社会网络分析软件提供;[22]
  • 哈塞图 Hasse diagram,一种专门用于部分顺序的图形绘制[23]
  • 'Dessin d'enfants,代数几何中使用的一种图形画法;[24]
  • 状态图 State diagram,有限状态机的图形表示;[25]
  • 计算机网络图 Computer network diagram,描述计算机网络中的节点和连接;[26]
  • 流程图 Flowchart和drakon 图,其中节点表示算法的步骤,边表示步骤之间的控制流的绘图;
  • 数据流程图 Data-Flow Diagram,其中节点表示信息系统的组件,边缘表示信息从一个组件到另一个组件的移动;
  • 生物信息学包括系统发育树,蛋白质,蛋白质相互作用网络,和代谢途径。[27]


此外,电子设计自动化 electronic design automation(EDA)的布局和布线步骤在很多方面与图形绘制相似,而在分布式计算 distributed computing中贪婪嵌入 Greedy embedding的问题也是如此,并且图形绘制文献包括从EDA文献中借来的一些结果。然而,这些问题也在几个重要方面有所不同:例如,在 EDA,面积最小化和信号长度比美观更重要,EDA中的路由问题可能每个网有两个以上的终端,而图绘制中的类似问题通常只涉及每条边的顶点对。


软件

图6:Gephi 0.9.1界面

软件、系统和绘制图形系统的提供者包括:

  • BioFabric:开源软件,用于将节点绘制为水平线来可视化大型网络。
  • Cytoscape:可视化分子相互作用网络的开源软件
  • Gephi:开源网络分析和可视化软件
  • Graph-Tool:一个免费/免费的Python库,用于分析图形
  • Graphviz:来自美国电话电报公司的开放源码绘图系统[28]
  • Linkurious:图形数据库的商业网络分析和可视化软件
  • Mathematica:一个通用的计算工具,包括2D和3D图形可视化和图形分析工具。[29][30]
  • Microsoft Automatic Graph Layout:用于图表布局的开放源码net库(以前称为GLEE)[31]
  • NetworkX:用于研究图和网络的Python库引用错误:无效<ref>标签;未填name属性的引用必须填写内容
  • Tom Sawyer Perspectives:[32]是一款基于图形的软件,用于构建企业级图形和数据可视化和分析应用程序。它是一个软件开发工具包(SDK),具有基于图形的设计和预览环境引用错误:无效<ref>标签;未填name属性的引用必须填写内容
  • Tulip:[33] 开源数据可视化工具
  • yEd 具有图形布局功能的图形编辑器[34]
  • PGF/TikZ 带graphdrawing软件包的3.0(需要LuaTeX)[35]
  • LaNet-vi:开源大型网络可视化软件
  • Edraw Max:2D商业技术制图软件

参考文献

一般参考资料

  • Di Battista, Giuseppe; Eades, Peter; Tamassia, Roberto; Tollis, Ioannis G. (1994), "Algorithms for Drawing Graphs: an Annotated Bibliography", Computational Geometry: Theory and Applications, 4 (5): 235–282, doi:10.1016/0925-7721(94)00014-x.
  • Di Battista, Giuseppe; Eades, Peter; Tamassia, Roberto; Tollis, Ioannis G. (1998), Graph Drawing: Algorithms for the Visualization of Graphs, Prentice Hall, ISBN 978-0-13-301615-4 {{citation}}: Cite has empty unknown parameters: |1= and |2= (help).
  • Herman, Ivan; Melançon, Guy; Marshall, M. Scott (2000), "Graph Visualization and Navigation in Information Visualization: A Survey", IEEE Transactions on Visualization and Computer Graphics, 6 (1): 24–43, doi:10.1109/2945.841119.
  • Jünger, Michael; Mutzel, Petra (2004), Graph Drawing Software, Springer-Verlag, ISBN 978-3-540-00881-1.

citation|title=Drawing Graphs: Methods and Models|editor1-first=Michael|editor1-last=Kaufmann|editor2-first=Dorothea|editor2-last=Wagner|publisher=Springer-Verlag|series=Lecture Notes in Computer Science|volume=2025|year=2001|doi=10.1007/3-540-44969-8|isbn=978-3-540-42062-0}}. citation|editor-first=Roberto|editor-last=Tamassia|editor-link=Roberto Tamassia|title=Handbook of Graph Drawing and Visualization|publisher=CRC Press|url=http://cs.brown.edu/~rt/gdhandbook/%7Cyear=2014%7Caccess-date=2013-08-28%7Carchive-url=https://web.archive.org/web/20130815181243/http://cs.brown.edu/~rt/gdhandbook/%7Carchive-date=2013-08-15%7Curl-status=dead}}.

专门的子主题

其他链接

  • GraphX library for .NET: open-source WPF library for graph calculation and visualization. Supports many layout and edge routing algorithms.
  • 模板:Dmoz for many additional links related to graph drawing.

本中文词条Ryan翻译,由CecileLi审校,薄荷编辑欢迎在讨论页面留言。

本词条内容翻译自 wikipedia.org,遵守 CC3.0协议。

  1. ↑ Di Battista et al. (1994), pp. vii–viii; Herman, Melançon & Marshall (2000), Section 1.1, "Typical Application Areas".
  2. ↑ 2.0 2.1 Di Battista et al. (1994), p. 6.
  3. ↑ 3.0 3.1 Di Battista et al. (1994), p. viii.
  4. ↑ Di Battista et al. (1994), p. viii.
  5. ↑ Knuth, Donald E. (2013), "Two thousand years of combinatorics", in Wilson, Robin; Watkins, John J. (eds.), Combinatorics: Ancient and Modern, Oxford University Press, pp. 7–37.
  6. ↑ Holten & van Wijk (2009); Holten et al. (2011).
  7. ↑ Garg & Tamassia (1995).
  8. ↑ Longabaugh (2012).
  9. ↑ Di Battista et al. (1994), Section 2.1.2, Aesthetics, pp. 14–16; Purchase, Cohen & James (1997).
  10. ↑ Di Battista et al. (1994), p 14.
  11. ↑ Di Battista et al. (1994),p. 16.
  12. ↑ 12.0 12.1 Pach & Sharir (2009).
  13. ↑ Grandjean, Martin (2014). "La connaissance est un réseau". Les Cahiers du Numérique. 10 (3): 37–54. doi:10.3166/lcn.10.3.37-54. Retrieved 2014-10-15.
  14. ↑ Di Battista et al. (1994), Section 2.7, "The Force-Directed Approach", pp. 29–30, and Chapter 10, "Force-Directed Methods", pp. 303–326.
  15. ↑ Beckman (1994); Koren (2005).
  16. ↑ Di Battista et al. (1994), Chapter 5, "Flow and Orthogonal Drawings", pp. 137–170; (Eiglsperger, Fekete & Klau 2001).
  17. ↑ Herman, Melançon & Marshall (2000), Section 2.2, "Traditional Layout – An Overview".
  18. ↑ Sugiyama, Tagawa & Toda (1981); Bastert & Matuszewski (2001); Di Battista et al. (1994), Chapter 9, "Layered Drawings of Digraphs", pp. 265–302.
  19. ↑ Saaty (1964).
  20. ↑ Doğrusöz, Madden & Madden (1997).
  21. ↑ Di Battista et al. (1994), Section 4.7, "Dominance Drawings", pp. 112–127.
  22. ↑ Scott (2000); Brandes, Freeman & Wagner (2014).
  23. ↑ Di Battista et al. (1994), pp. 15–16, and Chapter 6, "Flow and Upward Planarity", pp. 171–214; Freese (2004).
  24. ↑ Zapponi (2003).
  25. ↑ Anderson & Head (2006).
  26. ↑ Di Battista & Rimondini (2014).
  27. ↑ Bachmaier, Brandes & Schreiber (2014).
  28. ↑ "Graphviz and Dynagraph – Static and Dynamic Graph Drawing Tools", by John Ellson, Emden R. Gansner, Eleftherios Koutsofios, Stephen C. North, and Gordon Woodhull, in Jünger & Mutzel (2004).
  29. ↑ GraphPlot Mathematica documentation
  30. ↑ Graph drawing tutorial
  31. ↑ Nachmanson, Robertson & Lee (2008).
  32. ↑ Madden et al. (1996).
  33. ↑ "Tulip – A Huge Graph Visualization Framework", by David Auber, in Jünger & Mutzel (2004).
  34. ↑ "yFiles – Visualization and Automatic Layout of Graphs", by Roland Wiese, Markus Eiglsperger, and Michael Kaufmann, in Jünger & Mutzel (2004).
  35. ↑ Tantau (2013); 详见GD 2012 presentation