根据顶点颜色为图中的边着色

Coloring Edges in graph according to their vertexes color

  1. 我在 mathematica 工作并且有一个图表,每个顶点都是不同的颜色,我想给边着色。例如:如果两个顶点的颜色相同,则边将是某种颜色,对于具有此 属性.

  2. 的所有边依此类推
  3. 一般来说,我怎样才能得到顶点的颜色?

谢谢!

这里是生成图形的方法,假设您可以访问输入:

 g = Select[
         Union@Table[ 
          RandomInteger[{1, 10}] -> RandomInteger[{1, 10}], {35}],
            ! Equal @@ # &];
 colors = Table[ 
    i -> RandomChoice[ {Red, Blue, Green, Orange} ] ,
             {i, (Union@Flatten[List @@@ g])}];
 Graph[g,
   VertexStyle -> colors,
   EdgeStyle -> ((# -> (#[[1]]/.colors )) & /@ 
     Select[g,(#[[1]]/.colors) == (#[[2]]/.colors ) & ]) ]

如果你只有graph对象,需要提取style数据会有点麻烦。

使用 the IGraph/M package 的 属性 映射功能更容易做到这一点。

生成随机颜色的图形:

SeedRandom[1234]
g = RandomGraph[{10, 20},
  VertexStyle -> {_ :> RandomChoice[{Orange, Darker@Green, Lighter@Blue}]},
  EdgeStyle -> Thick,
  VertexSize -> Medium
 ]

加载包:

<<IGraphM`

做映射:

IGEdgeMap[
 If[First[#] === Last[#], First[#], None] &,
 EdgeStyle -> IGEdgeVertexProp[VertexStyle],
 g
]

解释:

IGEdgeVertexProp[VertexStyle]是一个函数,提取所有边的端点的VertexStyle,作为一个列表。

IGEdgeVertexProp[VertexStyle][g]

IGEdgeMap[f, prop -> fun, g]会将函数f应用于上述列表的每个元素(由fun[g]返回),并将每个结果存储在边属性中prop.

我发现这种使用属性的方式对于图形样式、属性 转换、复制属性等来说非常容易。

还有 IGEdgePropIGVertexProp 分别用于提取边和顶点属性,IGVertexMap 用于将函数映射到顶点属性。