根据图形的顶点颜色着色图形

时间:2015-04-15 09:54:24

标签: graph wolfram-mathematica

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

  2. 一般来说,我怎样才能获得顶点的颜色?

  3. 谢谢!

2 个答案:

答案 0 :(得分:1)

这与the IGraph/M package的属性映射功能相比要容易得多。

生成具有随机颜色的图形:

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

enter image description here

加载程序包:

<<IGraphM`

执行映射:

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

enter image description here

说明:

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

IGEdgeVertexProp[VertexStyle][g]

enter image description here

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

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

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

答案 1 :(得分:0)

这里是如何生成图表,假设您可以访问输入:

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

enter image description here

如果您只有图形对象,需要提取样式数据,这将是一件苦差事。