2017-06-16 70 views
2

編碼圖是我的示例代碼顏色數學

Morb = 3; 
NPar = 5; 
Sols = Solve [ 
    Append[Array[n[#] >= 0 &, Morb], Array[n, Morb, 1, Plus] == NPar], 
    Integers]; 
CIElements = Array[n, Morb] /. Sols; 

OpOB[ij_, Ind1_] := (
    If[Part[ Ind1, Part[ij, 2]] != 0, 
    Ind2 = Ind1; 


    Part[Ind2, Part[ij, 1]] = Part[Ind1, Part[ij, 1]] + 1; 
    Part[Ind2, Part[ij, 2]] = Part[Ind1, Part[ij, 2]] - 1; 
    , Ind2 = 0 ]; 
    Return[Ind2] 
) 
GenerateEdge[ij_, Ind1_] := Ind1 \[DirectedEdge] OpOB[ij, Ind1] 


OpSol = Solve[{i < j, i > 0, i <= Morb, j > 0, j <= Morb}, {i, j}, 
    Integers]; 
OpLabels = {i, j} /. OpSol; 
MapList = {}; 
Do[ 
If[Length[OpOB[ii, jj]] != 0, 
    AppendTo[ MapList, GenerateEdge[ ii, jj] ], 
    Unevaluated[Sequence[]]], 
{ii, OpLabels}, {jj, CIElements}] 
Graph[MapList] 

我產生邊緣叫MAPLIST的列表,它生成的圖表就好了。但是,我想根據OpLabels的哪個元素生成邊緣來對圖形的邊緣進行顏色編碼。我可以很容易地修改我的Do[ ]子句以包含一些標籤,稍後將其解釋爲顏色。然而,其他的解決方案,我已經遇到過,比如

https://mathematica.stackexchange.com/questions/17658/how-can-i-display-a-multigraph-with-different-colored-edges

明確列出的不同顏色的數量。這裏的顏色數量取決於Morb的值,所以我可以提前指定。有什麼方法可以簡單地用數字標記每個邊,然後根據某些預定義的調色板按數字選取顏色?

回答

2

我假設你的意思是這裏的每個ij是不同的顏色..

GenerateEdge[ij_, Ind1_] := 
Style[ Ind1 \[DirectedEdge] OpOB[ij, Ind1] , color[ij] ] 

功能color這樣定義:

ncolors = 0 
Clear[color] 
color[x_] := color[x] = ColorData[3, "ColorList"][[++ncolors]] ; 

這將導致產生一個新的顏色每一個獨特的說法。

與您的其餘代碼相同..

enter image description here

+0

非常好!感謝您的及時回覆。這正是我所期待的。 –