我在mathematica工作并且有一个图表,每个顶点都是不同的颜色,我想为边缘着色。例如:如果两个顶点采用相同的颜色,则边缘将采用某种颜色,对于具有此属性的所有边,依此类推。
一般来说,我怎样才能获得顶点的颜色?
谢谢!
答案 0 :(得分:1)
这与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]
返回),并将每个结果存储在edge属性prop
中。
我发现这种使用属性的样式对于图形样式,属性转换,复制属性等非常容易。
还有IGEdgeProp
和IGVertexProp
用于分别提取边缘和顶点属性,还有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 ) & ]) ]
如果您只有图形对象,需要提取样式数据,这将是一件苦差事。