2012-03-25 74 views
2

谷歌沒有給我提供答案的原因是我不知道在這種情況下(*)列表元素的正確名稱。在這裏我有一些輸入數據:Mathematica,修改過渡列表

edges = ReadList["some\\external\\data\\source\\1"] 
(* edges = { 0 -> 1, 1 -> 2, 2 -> 3 } *) 

labels = ReadList["some\\external\\data\\source\\2"] 
(* labels = { 0 -> A, 1 -> B, 2 -> A, 3 -> B } *) 

我想創建一個新的列表風格標籤代之以一個綠色這樣我就可以得到:

styles = { 0 -> Red, 1 -> Green, 2 -> Red, 3 -> Green } 

我用它繪製圖形:

Graph [ edges, VertexLabels -> labels, VertexStyle -> styles ] 

(*)試圖對,過渡的列表,邊緣的名單列表,卻發現RIGHTARROW運營商具有普遍意義......

+0

對不起,你說右箭頭有一般意義,但是我不清楚你是什麼意思ñ由它。 – 2012-03-25 21:44:05

+0

我的意思是,我無法找到A - > B是關係,分配,層次結構還是轉換? – 2012-03-25 22:13:45

+0

@Bartek A→B的'FullForm'是'Rule [A,B]'。換句話說,這是一個轉換規則。這在Mathematica中有明確的含義。請參閱http://reference.wolfram.com/mathematica/tutorial/TransformationRulesAndDefinitionsOverview.html – DavidC 2012-03-26 18:09:07

回答

3

我想你想要這樣的:

edges = {0 -> 1, 1 -> 2, 2 -> 3} 

labels = {0 -> A, 1 -> B, 2 -> A, 3 -> B} 
styles = labels /. {A -> Red, B -> Green} 
Graph[edges, VertexLabels -> labels, VertexStyle -> styles] 

enter image description here

+0

這太棒了,謝謝! – 2012-03-26 07:54:45

0

如何與「數據庫」開始:

edges[0] = 1; edges[1] = 2; edges[2] = 3; 
labels[0] = "A"; labels[1] = "B"; labels[2] = "A"; labels[3] = "B"; 

,然後一些替換規則:

s["A"] = "Red"; s["B"] = "Green"; 

,它可以讓你定義新labels功能:

styles[e_] := s[labels[e]] 

這給

In[9]:= Table[styles[i], {i, 0, 3}] 

Out[9]= {"Red", "Green", "Red", "Green"} 

等等

+0

我正在讀取外部數據: edges = ReadList [「\\ Workspace \\ data \\ graph \\ 1.edg」]; labels = ReadList [「\\ Workspace \\ data \\ graph \\ 1.lab」]; 我需要一個有效的解決方案。 – 2012-03-25 22:05:18

+0

另外我不知道如何在「數據庫」方法和圖形數據之間進行轉換。 – 2012-03-25 22:32:23